mysql的排序,有两种方式:
Using filesort : 通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sort buffer中完成排序操作,
所以不是通过索引直接返回排序结果的排序都叫filesort排序
Using index :通过有序索引顺序扫描直接返回有序数据,这种情况即为using index,不需要额外排序,操作效率高
对于以上的两种排序,Using index的性能高,而Using filesort的性能低,我们在优化排序操作时,尽量要优化成Using index
在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低
优化思路:
一般分页查询时,通过创建覆盖索引能够比较好的提升性能,可以通过覆盖索引加子查询进行优化
explain select * from tb_sku t ,(select id from tb_sku order by id limit 200000,10) a where t.id = a.id;
update course set name ='javaEE'where id =1;
当我们在执行这样的SQL语句的时候,会锁定id为1的这一行的数据,然后事务提交之后,行锁释放
但是我们在执行下面SQL时
update course set name ='SpringBoot'where name ='PHP';
我们开启多个事务,在执行上述SQL,发现行锁升级为了表锁。导致该update语句的性能大大降低
Innodb的行锁是针对索引加的锁,不是针对记录加的锁,并且该索引不能失效,否则会从行锁升级为表锁