官方文档
参考文档地址 [优化SELECT语句]
1、优化需要了解的知识
在phpmyadmin查看上篇建表结构,索引情况:
操作 | 键名 | 类型 | 唯一 | 紧凑 | 字段 | 基数 | 排序规则 | 空 | 注释 |
---|---|---|---|---|---|---|---|---|---|
编辑 删除 | PRIMARY | BTREE | 是 | 否 | id | 0 | A | 否 | |
编辑 删除 | index_user_id | BTREE | 否 | 否 | user_id | 0 | A | 否 | 用户ID哈希索引 |
a.索引类型
PRIMARY、INDEX(普通索引)、UNIQUE(唯一性索引)、FULLTEXT(全文索引);
外键索引、合并索引/组合索引
b.索引方法
BTREE(默认)、HASH
参考《Mysql目前主要的几种索引类型》
c.创建索引的时机
在SQL中存在 <,<=,=,>,>=,BETWEEN,IN,以及LIKE 时才会使用索引。
2、SELECT语句优化
a.WHERE子句优化
- 使用索引树(默认BTREE)
- 删除不必要的括号 –> 恒定折叠 –> 恒定条件去除
- HAVINGWHERE如果不使用GROUP BY或聚合函数(COUNT(), MIN()等等),则合并
— 如果存在ORDER BY子句和不同的GROUP BY子句,或者如果 ORDER BY或者GROUP BY 包含连接队列中第一个表以外的表中的列,则会创建临时表。
— 如果使用SQL_SMALL_RESULT 修饰符,MySQL使用内存临时表。
b、范围优化
- 单部分索引
删除不能用于范围扫语法块 –> 折叠条件
发表回复