一个实例讲解My SQL查询优化
●排序的列来自不同的表。
为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。假如排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。 内容来自dedecms
3.消除对大型表行数据的顺序存取 dedecms.com
在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套3层的查询,假如每层都查询1000行,那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的列进行索引。例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)。假如两个表要做连接,就要在“学号”这个连接字段上建立索引。 copyright dedecms
还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。下面的查询将强迫对orders表执行顺序操作: 内容来自dedecms
SELECT * FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_num=1008 织梦内容管理系统
虽然在customer_num和order_num上建有索引,但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的集合,所以应该改为如下语句:
本文来自织梦
SELECT * FROM orders WHERE customer_num=104 AND order_num>1001
本文来自织梦
UNION
SELECT * FROM orders WHERE order_num=1008
织梦好,好织梦
这样就能利用索引路径处理查询。
copyright dedecms
本文来自织梦
文章评论
共有位Admini5网友发表了评论 查看完整内容