在新建索引和书写sql语句的时候要遵循,myslq的最左前缀匹配原则(会一直从左向右匹配直到遇到范围查询(>、<、between、like)就停止)停止匹配以后的字段就不会再走索引,所以在写sql的时候尽量把“=”的where条件从左至右的书写 最后写“>、<、between、like”,在建立索引的时候也要把“=”作为where条件的字段放到索引的前面。如:
select * from t_table where a=1 and b=2 and c=3 and d>4 ====> 对应索引就可以是 (a,b,c,d)
注意:select * from t_table where a=1 and b=2 and d>4 and c=3 ====> 对应索引(a,b,c,d) 这个时候c,d的索引是不会走的
在这里 同样是“=”的情况下 abc的索引顺序是可以打乱的
select * from t_table where a=1 and b=2 and c=3 and d>4 ====> 对应索引也可以是 (b,c,a,d)
索引列不能参与计算,对于一些函数如:from_unixtime,是会影响到索引的匹配的,导致索引失效,所以要尽量的把计算放倒字段的匹配值上。如:
select * from t_table where from_unixtime(create_time) = ’2016-10-09’ ===》索引就失效了
select * from t_table where create_time = unix_timestamp(’2016-10-09’); ===》正确技能get
选择字段尽量不重复字段新建索引,就像主键ID永远也不会重复。
对于联表查询,子查询 如果存在order by limit 等语句 可以在 联表,子查询的时候先把需要排序的表和limit的表排序和limit 。
尽量使用组合索引,而不是新建索引,并且大量的新建索引对于数据的更新和增加,磁盘的存储会造成开销,所以根据具体的业务场景,相关的sql,设计相应的索引是很必要的。最好的方式就是定期的排查慢日志把慢sql排查出来然后再结合相应的业务场景设计相应的索引方式。
对于索引的优化不单单的体现在建立索引的方式上,更重要的是结合业务逻辑进行分析,来确定索引的必要性和方式方法,并且在书写sql语句的时候一定要注意性能。
http://blog.csdn.net/u014017080/article/details/52199432 点击打开链接 这是一些建立数据库时的一些小技巧 可以一起看一下
欢迎指正。