本文实例总结了MySQL数据库优化技术的索引用法。,具体如下:
这里紧接上一篇《MySQL数据库优化技术之配置技巧总结》,进一步分析索引优化的技巧:
(七)表的优化
1. 选择合适的数据引擎
MyISAM:适用于大量的读操作的表
InnoDB:适用于大量的写读作的表
2.选择合适的列类型
使用 SELECT * FROM TB_TEST PROCEDURE ANALYSE()可以对这个表的每一个字段进行分析,给出优化列类型建议
3.对于不保存NULL值的列使用NOT NULL,这对你想索引的列尤其重要
4.建立合适的索引
5.使用定长字段,速度比变长要快
(八)建立索引原则
1.合理使用索引
一个Table在一次query中只能使用一个索引,使用EXPLAIN语句来检验优化程序的操作情况
使用analyze帮助优化程序对索引的使用效果做出更准确的预测
2.索引应该创建在搜索、排序、归组等操作所涉及的数据列上
3.尽量将索引建立在重复数据少的数据列中,唯一所以最好
例如:生日列,可以建立索引,但性别列不要建立索引
4.尽量对比较短的值进行索引
降低磁盘IO操作,索引缓冲区中可以容纳更多的键值,提高命中率
如果对一个长的字符串建立索引,可以指定一个前缀长度
5.合理使用多列索引
如果多个条件经常需要组合起来查询,则要使用多列索引(因为一个表一次查询只能使用一个索引,建立多个单列索引也只能使用一个)
6.充分利用最左前缀
也就是要合理安排多列索引中各列的顺序,将最常用的排在前面
7.不要建立过多的索引
只有经常应用于where,order by,group by中的字段需要建立索引.
8.利用慢查询日志查找出慢查询(log-slow-queries, long_query_time)
(九)充分利用索引
1.尽量比较数据类型相同的数据列
2.尽可能地让索引列在比较表达式中独立, WHERE mycol < 4 / 2 使用索引,而WHERE mycol * 2 < 4不使用
3.尽可能不对查询字段加函数,
如:WHERE YEAR(date_col) < 1990改造成WHERE date_col < '1990-01-01'
WHERE TO_DAYS(date_col) - TO_DAYS(CURDATE()) < cutoff 改造成WHERE date_col < DATE_ADD(CURDATE(), INTERVAL cutoff DAY)
4.在LIKE模式的开头不要使用通配符
5.使用straight join可以强制优化器按照FROM子句的次序来进行联结,可以select straight join,强制所有联结,也可以select * from a straight join b强制两个表的顺序.
6.使用force index强制使用指定的索引.如 select * from song_lib force index(song_name) order by song_name比不用force index效率高
7.尽量避免使用MySQL自动类型转换,否则将不能使用索引.如将int型的num_col用where num_col='5'
(十)SQL语句的优化
1.创建合适的统计中间结果表,降低从大表查询数据的几率
新闻热点
疑难解答