- 索引优点:
- 大大加快数据检索速度。
- 唯一索引:保证表中每行数据的唯一性
- 加速表与表之间连接
- 在分组和排序子句中显著减少分组和排序时间。
- 索引缺点:
- 索引需要占用物理空间
- 增删改,索引需要维护,降低数据的维护速度。
- 各种索引:
普通索引, 唯一索引, 主键索引, 候选索引, 聚集索引, 非聚集索引, 单独索引,复合索引。
- 普通索引:
最基本的索引类型,没有唯一性的限制。
创建方式:
1. create table <table_name>([...], index<index_name>)(column_name, ...)
CREATE TABLE T_YANJF_USER ( id VARCHAR(32) NOT NULL, user_name VARCHAR(100) NOT NULL, user_phone VARCHAR(11) NOT NULL, user_qq VARCHAR(11) NOT NULL, PRIMARY KEY (id), INDEX phone_index (user_phone) );
2. create index <index_name> on <table_name>(column_name, ...)
create index user_name_index on t_yanjf_user(user_name);
3. alter table <table_name> add index <index_name>(column_name, ...)
alter table t_yanjf_user add index user_qq_index(user_qq)
- 唯一索引:
不允许任意两行有相同的索引值的索引。
列中数据有重复时,不允许创建唯一索引。
创建方式:基本索引 index 前面加 unique.
1. create table <table_name>([...], unique index<index_name>)(column_name, ...)
...
- 主键索引:
主键会自动创建主键索引。
主键索引是一种特定的唯一索引。
只能创建一个,但可以包含多列。
创建方式:
PRIMARY KEY (id),
- 候选索引:
也要求数据的唯一性。
在数据库和自由表中可以为每个表创建多个候选索引。- 聚集索引:
行的物理顺序和键值的逻辑顺序相同。
一个表只能有一个聚集索引。
剧集索引通常提供更快的访问速度。
适用于很少对基表进行增删改操作的情况。
创建主键时制定CLUSTERED关键字,自动生成唯一聚集索引。
应用场景:
聚集索引对于那些经常要搜索范围值的列特别有效- 非聚集索引:
行的物理顺序和逻辑顺序可以不相同。
表中每一列可以有自己的非聚集索引。
创建主键时制定NONCLUSTERED关键字,自动生成唯一非聚集索引。- 单独索引:
在一个列上建立的索引- 复合索引:
在多个列上建立的索引叫做复合索引
正常情况下复合索引不能替代多个单一索引
如果一个表中的数据在查询时有多个字段总是同时出现则这些字段就可以作为复合索引,形成索引覆盖可以提高查询的效率
复合索引的使用原则是第一个条件应该是复合索引的第一列
比如字段a,b,c建立复合索引相当于a,ab,abc建立3个索引
4.索引失效的场景:
- 使用like关键字匹配字符串第一个为‘%’。
- 查询条件中包含or/in/not in/<>关键字。
- 访问表上的数据行超出总表记录数30%的,变成全表扫描。
- 查询条件中,在索引列上使用函数时或者对索引列进行运算。
- 多列索引中,第一个索引使用范围查询,只能用到部分或者无法使用索引。
- 多列索引中,第一个查询条件不是最左索引。