1. sql语句性能原因
性能下降SQL慢, 执行时间长 1. 查询语句写的烂 2. 索引失效 * 单值 * 复合 3. 关联查询太多join 4. 服务器调优参数不合理(线程, 缓冲等)
2. 索引
什么是索引
- 索引本质是数据结构, 可以帮助mysql高效查询, "排好序的快速查找数据结构"
- 功能
- 排序
- 快速查找
- 数据结构 B+树
- 实际上不删除数据 而是更新,删除会让索引失效
- 索引本身也很大, 存在磁盘 df -h
- 复合索引用得多(比如淘宝查找东西)
索引优劣
- 优势
- 提高查找效率, 降低IO成本
- 索引对数据进行排序, 降低排序成本, 降低CPU消耗
- 劣势
- 索引占磁盘空间,也是一张索引表
- 降低更新表速度, 改数据还要改索引.
- 需要花时间优化索引, 建立最优索引
索引分类
- 单值索引: 一个索引包含单个列, 复合用得多, 一张表一般索引不要超过5个
- 唯一索引: 索引列的值必须唯一, 但允许有空值
- 复合索引: 一个索引包含多个列.
基本语法
提高查找效率, 类似于字典 表user, 字段name email
select * from user where name = '' and email = '';
create index 索引名 on 表名(字段)
create index idx_user_name on user(name) //单值
create index idx_user_nameEmail on user(name, email)//复合
3. sql执行顺序
- 手写
- 机读
机读顺序(重点从From开始)
总结sql解析顺序