7个SQL JOINS
左连接
右连接
左连接去除内连接
内连接
右连接去除内连接
全连接
全连接去除内连接
索引
帮助SQL搞笑获取数据的数据结构,平常所说的索引,如果没有特别指明,都是指B树(多路搜索树,并不一定是二叉的)结构组织的索引
索引优势
提高数据检索效率,降低数据库的IO成本
通过索引列对数据进行排序,降低数据排序成本,降低CPU消耗
索引劣势
索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也占空间
索引会降低表更新的速度,如对标的INSERT、UPDATE、DELETE操作。因为更新表时,还要保存索引文件每次更新添加了索引列的字段
哪些情况需要索引
1:主键自动建立唯一索引
2:频繁作为查询条件的字段应该作为索引
3:查询中与其他表关联的字段,外键关系建立索引
4:频繁更新的字段不适合创建索引
5:查询中排序到的字段,排序字段若通过索引去访问将大大提高排序速度
6:查询中统计或分组字段
哪些情况不需要建立索引
1:表记录太少
2:经常增删改的表
3:数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据列建立索引
explain
id
查询的序列号,包含一组数据,表示查询中执行select子句或操作表的顺序
三种情况:
id相同,执行顺序由上至下;
id不同,如果是子查询,id的序号会增加,id值越大优先级越高,越先被执行
id相同不同,同时存在
select_type
type
与查询优化息息相关,从最好到最差依次是,最少要达到range级别
system>const>eq_ref>ref>range>index>ALL
possible_keys和key
key_len
作用是看索引哪些字段被用到,具体来说是看联合索引。一般来说,key_len的值=字段长度*这个类型的字段所占空间,如以下例子
ref
显示索引的哪一列被使用了,如果可能的话,是一个常数。哪些列或常量被用于查找索引列上的值
rows
根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数
extra
using filesort——说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MYSQL中无法利用索引完成的排序操作称为“文件排序”
using temporary——使用了临时表保存中间结果,MYSQL在对查询结果排序时使用临时表。常见于order by和group by
using index——表示相应的select操作中使用了覆盖索引,避免访问了表的数据行,效率不错!如果同时出现using where,表明索引被用来执行索引键值的查找;如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。如果要使用覆盖索引,一定要注意select列表中只取出需要的列,不可select *
Join语句的优化
索引失效
最佳左前缀法则——如果索引了多列,要遵守最佳左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列
不在索引列上做任何操作——如计算、函数、类型转换,会导致索引失效而转向全表扫描
存储引擎不能使用索引中范围条件右边的列
尽量使用覆盖索引——只访问索引的查询(索引列和查询列一致),减少select *
mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描
is null,is not null也无法使用索引
like以通配符开头(‘%abc...')mysql索引失效会变成全表扫描的操作
字符串不加单引号索引失效
少用or,用它来连接时会索引失效
索引优化——一般性建议
SQL分析步骤
小表驱动大表——即小的数据集驱动大的数据集
如图中B表为小表
exist表达式
OrderBy优化
提高OrderBy速度
OrderBy例子
MySQL慢查询
默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数,如果不是调优需要的话,不建议启动该参数。使用set global slow_query_log = 1开启,如果要永久生效,需要修改配置文件
Show Profile
是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,默认情况下,参数处于关闭状态,并保存最近15次运行结果
MySQL读写锁
读锁会阻塞写,但是不会阻塞读;写锁会把读和写都阻塞
事务
更新丢失
当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其它事务的存在,就会发生丢失更新问题——最后的更新覆盖了由其他事务所做的更新
脏读
事务A读取到了事务B已修改但尚未提交的数据,还在这个数据基础上做了操作。此时如果事务B回滚,A读取的数据无效,不符合一致性原则
幻读
与脏读类似,幻读是事务B里面新增了数据
不可重复读
事务A读取到了B已经提交的修改数据,不符合隔离性
事务隔离机制
标签:进阶,查询,索引,SQL,id,排序,连接,select From: https://www.cnblogs.com/tianshu/p/16600477.html