使用MySQL并集避免顺序存储


  本文标签:MySQL并集

  如果使用MySQL并集,就是一避免顺序存取,提高查询语句的效率,下面就为您介绍这种使用MySQL并集消除对大型表行数据的顺序存取的方法  。

  在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响  。比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据  。避免这种情况的主要方法就是对连接的列进行索引  。例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)  。如果两个表要做连接,就要在“学号”这个连接字段上建立索引  。

  还可以使用MySQL并集来避免顺序存取  。尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取  。下面的查询将强迫对orders表执行顺序操作:   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

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