SQL优化
- 原因:性能低,执行时间太长,SQL语句欠佳(连接查询),索引失效,服务器参数设置不当(缓冲、线程数)
- SQL
- 编写过程:select distinct->from->join->on->where->group by->having->order by->limit
- 解析过程:from->on->join->where->group by->having->select distinct->order by->limit
- SQL优化,主要是在于优化索引
- 索引相当于书的目录,index是帮助MySQL高效获取数据的数据结构,MySQL底层用的是B+树
- 索引的缺点:
1.索引本身占空间很大,可以存放在内存/硬盘(通常在硬盘中)
2.索引不是所有情况都适用:a.少量数据,b.频繁更新的字段,c.很少使用的字段
3.索引会降低增删改的效率 - 索引的优点:
1.提高查询效率(降低IO使用率)
2.降低CPU使用率(order by age desc),排序已经排好了
索引
-
索引分类
- 主键索引:不能重复,不能是null
- 唯一索引:不能重复,可以是null
- 单值索引:单列,一个表可以有多个单值索引
- 复合索引:多个列构成的索引(相当于二级目录),(name,age)
-
创建索引
- 方式一:
create 索引类型 索引名称 on 表(字段)
- 单值索引:
create index dept_index on tb(dept);
- 唯一索引:
create unique index name_index on tb(dept);
- 复合索引:
create index dept_name_index on tb(dept,name);
- 单值索引:
- 方式二:
alter table 表名 add 索引类型 索引名(字段)
- 单值索引:
alter table tb add index dept_index(dept);
- 唯一索引:
alter table tb add unique index name_index(name);
- 复合索引:
alter table tb add index dept_name_index(dept,name);
- 单值索引:
- 如果一个字段是primary key,该字段默认是主键索引
- 方式一:
- 删除索引
drop index 索引名 on 表名;
drop index name_index on tb;
- 查询索引
show index from 表名;