-
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条)
聪明如你,不妨在这 发表你的看法与心得 ~