mysql使用语法(索引、执行顺序、函数以及自己的一些理解)

该博客聚焦MySQL相关知识,涵盖执行顺序、索引失效场景、on和where区别、inner join和from自连接查询区别、where和having区别,还介绍了常用函数使用方法、索引区别、索引使用差异以及索引添加和删除方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.mysql执行顺序

1.FROM  table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1
2.JOIN table2  所以先是确定表,再确定关联条件
3.ON table1.column = table2.columu 确定表的绑定条件 由Temp1产生中间表Temp2
4.WHERE  对中间表Temp2产生的结果进行过滤  产生中间表Temp3
5.GROUP BY 对中间表Temp3进行分组,产生中间表Temp4
6.HAVING  对分组后的记录进行聚合 产生中间表Temp5
7.SELECT  对中间表Temp5进行列筛选,产生中间表 Temp6
8.DISTINCT 对中间表 Temp6进行去重,产生中间表 Temp7
9.ORDER BY 对Temp7中的数据进行排序,产生中间表Temp8
10.LIMIT 对中间表Temp8进行分页,产生中间表Temp9

2.mysql索引失效场景

1.避免使用 select *  全表扫描会失效
2.模糊查询时 like "%刘"   导致全表扫描 百分号在前会失效  “刘%” (不一定会失效)
3.使用函数在索引列上或在条件上进行运算 where id-1=10  / where DATE(create_time) between  ""  and ""
4.not in exist 都会导致索引失效
5.B-TREE索引  is null 不会走 is not null 会走
6.复合索引 (time,name,age)第一种情况 time没有命中 name,age不会走索引(复合索引采用的是最左匹配原则)第二种情况 time命中索引但name没有命中 age还是不会走索引
7.使用 !=<> 都会导致全表扫描 失效
8.mysql在使用字符串时不加单引号 '' 会失效 (因为mysql会在底层对其进行隐式的类型转换)where name='2000'; where name=2000;

3.on和where的区别

1.在针对left join、right join 、union时,on和where产生的结果集是不同的, on是在连接时产生临时表的条件,假如 a left join b on a.id=b.id 此时on 返回的数据是满足a.id=b.id并且左表的数据都在的临时表temp1的数据;
2.inner join 返回的数据是相同的;

4.inner join和from(自连接)查询的区别

1.内连接是取左右两张表的交集形成一个新表。FROM并列两表后仍然还是两张表。如果还要对新表进行操作则要用内连接。从效率上看应该FROM并列查询比较快,因为不用形成新表。

5.where和having的区别

1.第一种执行顺序上的区别 where 在分组之前 而having 在分组之后
2.第二种 having可以使用聚合函数(max() min() count() avg)而 where 语句不可以

6.常用函数使用方法

1. IFNULL(,0) 如果列等于空 返回0 相反 返回本身;
2. IF(expr,v1,v2) 	如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。
3. CONCAT(a1,a2,a3...n) 字符串 a1,a2,a3 等多个字符串合并为一个字符串;
4. DATE(日期) 将时间转换成"yyyy-MM-dd"; 

7.mysql索引区别

1.主要结构上: 分为B+Tree索引和Hash索引;
2.B+Tree是mysql最频繁的一个索引数据结构,是Inodb和Myisam存储引擎模式的索引类型。相对Hash索引,B+树在查找单条记录的速度比不上Hash索引,但是因为更适合排序等操作,所以他更受用户的欢迎。毕竟不可能只对数据库进行单条记录的操作。
3.Hash索引只有Memory(Memory表只存在内存中,断电会消失,适用于临时表)存储引擎显示支持Hash索引,是Memory表的默认索引类型。hsah索引把数据的索引以hash形式组织起来,因此当查找某一条记录的时候,速度非常快。当时因为是hash结构,每个键只对应一个值,而且是散列的方式分布。所以他并不支持范围查找和排序等功能。
4.mysql常见索引: PRIMARY KEY(主键索引)、UNIQUE(唯一索引)INDEX(普通索引)FULLTEXT(全文索引) 、组合索引
5.mysql索引结构上的区别我不是很了解是贴的;

8.各种索引使用上的区别

1.普通索引:最基本的索引,没有任何限制。
2.唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
3.主键索引:它 是一种特殊的唯一索引,不允许有空值。 
4.全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
5.联合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。创建复合索引时应该将最常用(频率)作限制条件的列放在最左边,依次递减。

9.五种索引类型添加方法及删除索引

1. 例子 .alter table 表名 add 索引类型 索引名称(索引列);
2. 普通索引 alter table 'table_name' add index index_name('column');
3. 主键索引 alter table 'table_name' add primary key('column');
4. 唯一索引 alter table 'table_name' add unique('column');
5. 全文索引 alter table 'table_name' add fulltext('column');
6. 多列索引(组合索引) alter table 'table_name' add index index_name('column1','column2','column3',...,'columnn');
7. 删除索引 DROP INDEX index_name(索引名称) ON table_name(表名);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值