mysql SQL优化琐记之索引

 

equal最好了,其次in,最后是range


!=  <>  这类非操作尽量不用,它会转换为range。
>都是范围查询

 

复合索引有左匹配原则,(clo_a,clo_b)相当建立了两个索引
(clo_a,clo_b)
clo_a,

 

加索引前,最好在相同数据量的测试环境下,测试。 最好用线上的,怕造的数据有数据倾斜,造成数据选择性不高。

 

有分隔符的复杂索引,可以考虑前辍索引或复合索引

 

数据库增加索引操作


虽然,mysql声称5.7版本后,支持在线ddl且不锁表,但是,执行效率,还是没有pt-online-schema-change工具快

pt-online-schema-change工具不会有任何锁表的情况,因为,它的原理是新复制一张临时表,表结构和旧表一样,然后添加索引,把数据迁移到新临时表中,并且,还有3个触发器分别记录dml操作。最后,数据复制完成,2张表rename互换即可

使用online DDL模式,最稳妥,但需要安装online工具,得有权限。否则只能用普通DDL模式蛋疼的操作了

执行时间和数据量成正比,只不过是锁的时间会比较短,获取DML锁就可以了 后续还有一个锁的时间和增量数据有关

 

备注:

       只读库如果只是高并发的读操作,产生的是共享乐观锁,一般情况下,只读库很少出现死锁。如果出现象上次那种大批量的慢查询sql,客户端发起读请求,服务端未能及时返回数据,导致客户端一直连续发送请求时,可能会出现阻塞等待。

 

 

posted @ 2019-11-05 11:28  xuzhujack  阅读(195)  评论(0编辑  收藏  举报
;