This Domain(Admin5.com) is for Sale:

一个实例讲解My SQL查询优化

时间:2007-12-23  来源:不详  作者:迈克DB

  ●排序的列来自不同的表。

  为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。假如排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。 内容来自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

dedecms.com

  SELECT * FROM orders WHERE order_num=1008

织梦好,好织梦

  这样就能利用索引路径处理查询。
copyright dedecms


本文来自织梦

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息