MySQL高级 索引(一)

232 阅读1分钟

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执行顺序

  1. 手写
  2. 机读 机读顺序(重点从From开始) 总结sql解析顺序