如何建立索引
2009-08-19 16:24
295 查看
关于如何建立索引,及哪些情况适合使用索引,哪些情况不适合使用索引,各种书籍资料有很多。
但是最重要的原则是:实际测试。
实践是检验真理的唯一标准。建立索引的时候,应进行如下测试:
1 explain select语句,看看是否有使用到索引。
2 运行update和insert操作,看看建立索引的负效应是否在可接受范围。
3 务必在接近生产环境的数据规模下进行索引性能的测试。
第三点尤为重要。
因为在最近的项目优化过程中,发现:
在某个字段上建立了索引之后,如果是select返回30条记录,建立索引之后,select时间降到原来的1/6。提高很明显。
而在生产环境下,这个select需要返回的结果通常是上千(甚至上万的),建立索引之后,select的时间反而增加了快一倍。因此建立索引反而适得其反。
分析后觉得可能的原因如下:
1 该字段建立索引之后,基数并不高,也就是该字段的重复率较高,索引对性能的提升不明显。简单说,比如一个字段是:性别,只有男女两种情况,那建立索引完全没必要,反而降低了性能。
2 该select要返回的结果集很大(超过了1000条记录)。在这种情况下,mysql先查询索引,而后根据索引到表中取得记录,这个操作在需要取得的记录非常多的情况下,非常耗时。最终导致了:建立索引之后,select时间反而增加的情况。
这次的主要原因是2. 因为还进行了如下测试:如果该select语句只返回30条记录,建立索引之后,select时间为原来的1/6。
建立索引要注意的地方很多,最重要的原则还是:实际测试。
但是最重要的原则是:实际测试。
实践是检验真理的唯一标准。建立索引的时候,应进行如下测试:
1 explain select语句,看看是否有使用到索引。
2 运行update和insert操作,看看建立索引的负效应是否在可接受范围。
3 务必在接近生产环境的数据规模下进行索引性能的测试。
第三点尤为重要。
因为在最近的项目优化过程中,发现:
在某个字段上建立了索引之后,如果是select返回30条记录,建立索引之后,select时间降到原来的1/6。提高很明显。
而在生产环境下,这个select需要返回的结果通常是上千(甚至上万的),建立索引之后,select的时间反而增加了快一倍。因此建立索引反而适得其反。
分析后觉得可能的原因如下:
1 该字段建立索引之后,基数并不高,也就是该字段的重复率较高,索引对性能的提升不明显。简单说,比如一个字段是:性别,只有男女两种情况,那建立索引完全没必要,反而降低了性能。
2 该select要返回的结果集很大(超过了1000条记录)。在这种情况下,mysql先查询索引,而后根据索引到表中取得记录,这个操作在需要取得的记录非常多的情况下,非常耗时。最终导致了:建立索引之后,select时间反而增加的情况。
这次的主要原因是2. 因为还进行了如下测试:如果该select语句只返回30条记录,建立索引之后,select时间为原来的1/6。
建立索引要注意的地方很多,最重要的原则还是:实际测试。
相关文章推荐
- 如何判断一个表是否建立索引约束等信息的SQL语句
- 如何建立索引,提高查询速度。
- 如何提高Lucene建立索引的速度 How to make indexing faster
- 如何创建效率高sql-建立索引
- 如何建立索引,提高查询速度?
- 如何通过Haystack建立pdf文档的全文索引
- 建立索引的优缺点是什么?如何分析确定一个表上应该建立哪些索引
- 索引的优点和缺点,如何建立索引,索引的特征
- 如何设计高效合理的MySQL查询语句(建立数据库索引的基本原则)
- 如何优化操作大数据量数据库(建立索引)
- 如何为数据库建立索引
- SQL Server 2008中如何为XML字段建立索引
- 如何在OracleE数据库的字段上建立索引
- 如何建立索引,提高查询速度
- 1.如何优化操作大数据量数据库(建立索引)
- 如何建立索引,提高查询速度
- 如何优化操作大数据量数据库(建立索引)
- 如何正确合理的建立MYSQL数据库索引(写的太好了,备用)
- 如何在ORACLE数据库的字段上建立索引?
- 如何为mysql建立索引