where a=1 and b=2 and c=3 and (d=4 or e=5)这样的条件,mysql内部的筛选机制是什么?
也就是说这样的条件,mysql是先进行哪个字段的判断呢?
是括号中的d和e还是a或者c呢

解决方案 »

  1.   

    在字段上建立 索引没有?
    MYSQL自行优化
      

  2.   

    where a=1 and b=2 and c=3 and (d=4 or e=5)这个情况,MYSQL会先检查这个表的索引情况,根据索引的值的分布,MYSQL会决定使用哪个索引来进行筛选。
    比如现在表上只有索引 (b) 则,MYSQL会先根据这个B字段的索引进行 b=2的筛选。具体有很多种情况,你可以参考手册中的解释。MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
    7.2. 优化SELECT语句和其它查询
    7.2.1. EXPLAIN语法(获取SELECT相关信息)
    7.2.2. 估计查询性能
    7.2.3. SELECT查询的速度
    7.2.4. MySQL怎样优化WHERE子句
    7.2.5. 范围优化
    7.2.6. 索引合并优化
    7.2.7. MySQL如何优化IS NULL
    7.2.8. MySQL如何优化DISTINCT
    7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN
    7.2.10. MySQL如何优化嵌套Join
    7.2.11. MySQL如何简化外部联合
    7.2.12. MySQL如何优化ORDER BY
    7.2.13. MySQL如何优化GROUP BY
    7.2.14. MySQL如何优化LIMIT
    7.2.15. 如何避免表扫描
    7.2.16. INSERT语句的速度
    7.2.17. UPDATE语句的速度
    7.2.18. DELETE语句的速度
    7.2.19. 其它优化技巧
      

  3.   

    这个很难如果,因为需要假设的因素过多。
    比如A的索引有没有,B的索引有没有?(A,B)的复合索引有没有?如果都有的话,那这些索引的值分布情况是什么?手册中
    7.2.4. MySQL怎样优化WHERE子句
    花了一节几千个字,几十个例子说明这个问题。《数据库系统概论(第四版)》 王珊 萨师煊   高等教育出版社 中专门花了一个章节讲查询优化。所以建议楼主,如果是实际中的问题,提供你的 show index from table1 以供大家分析,如果是理论上讨论,则建议先参考一下相关的文档或教材。