• mysql查询优化

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • MySQL 查询优化经验



    查询器优化:

    •MySQL对子查询会处理为临时表,所以一般JOIN效率比做子查询高。

    •MySQL在JOIN中对ORDER BY、GROUP BY优化较弱,JOIN中的排序分组几乎都会使用Fille Sort和临时表

    •MySQL只有RBO,没有CBO,所以总是选择类型上最优的执行计划,而不一定是开销最小的。

    •MySQL对于OR,很多时候并不会优化成两次索引访问或合并索引,所以OR最好写成两条SQL,做UNION ALL。

    •IN中存在NULL条件,可能会让优化器走成全表扫描。

    索引优化:

    •MySQL只在认为走索引可以筛去85%以上数据的时候,才使用索引,如果达不到这个标准,索引是无意义的。

    •前缀索引:MySQL可以利用索引的前向部分,但不可以利用后向部分,不支持反向索引。

    • 例如:SELECT col2 FROMtable WHERE col1=1;可以使用索引(col1,col2),但不可以使用(col2,col1).

    •不等比较的优化:如果索引的前向部分在WHERE中是等于,那么可以使用索引,如果索引的前向部分再WHERE中是不等比较,那么不可以为后面的等于比较使用索引

    • 例如:SELECT col1 FROMtable WHERE col2=1 AND col3 >10;可以完全使用索引(col2,col3),但只可以使用(col3,col

    2)的前缀,


    •排序的优化:可以在条件是等于的时候继续使用索引排序,或者条件中的不等于字段就是排序字段。

    • 例如:SELECT col1 FROMtable WHERE col2=1 AND col3>0 ORDER BY col3,可以完全使用索引(col2,col3)避免排序。但条件是col2<1 AND col3=0 ORDER BY col3时则只能使用col2排除记录,不可以用来排序。

    •GROUP BY/DISTINCT也是以排序为基础,优化同上。

    • 标签:
    • 查询
    • 排序
    • 使用
    • 优化
    • 学习元
    • 条件
    • mysql
    • 索引
    • col2
    • col3
    • col1
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部