SQL 索引简介
索引 是一种数据结构,它帮助数据库管理系统(DBMS)快速查找和检索数据,就像书籍中的目录一样,可以加速查找特定的信息。通过索引,查询操作可以大大提高效率,尤其是在数据量庞大的情况下。
1. 常见的索引类型
- 单列索引(Single-column Index):只有一个列作为索引。
- 复合索引(Composite Index):由多个列组成的索引。复合索引的顺序非常重要,查询时需要考虑列的顺序。
2. 创建索引
sql
创建单列索引:
CREATE INDEX idx_column_name ON table_name (column_name);
sql
创建复合索引:
CREATE INDEX idx_column1_column2 ON table_name (column1, column2);
sql
创建唯一索引:
CREATE UNIQUE INDEX idx_column_name ON table_name (column_name);
sql
创建全文索引:
CREATE FULLTEXT INDEX idx_column_name ON table_name (column_name);
3. 删除索引
sql
普通索引 删除:DROP INDEX index_name ON table_name;
主键索引 删除:ALTER TABLE table_name DROP PRIMARY KEY;
4. 查询某表的索引
sql
可以使用 SHOW INDEX 命令来查看某个表的索引。
SHOW INDEX FROM table_name;
5.查看sql使用了哪个索引 、是否使用了索引
sql
EXPLAIN 你的SQL语句
EXPLAIN SELECT * FROM your_table WHERE column = 'xxx';
查询到的结果
执行后会得到一张表,其中关键字段是:
| 字段 | 含义 |
|---|---|
| key | 使用的索引名(最重要) |
| key_len | 索引使用长度 |
| rows | 预计扫描的行数 |
| type | 访问类型(越优越好:const > ref > range > index > ALL) |
判断是否走索引看 key 字段
key有值 → 使用了某个索引key为NULL→ 没有使用索引(走全表扫描)
例子
EXPLAIN SELECT * FROM users WHERE name = 'Tom';
| id | select_type | table | type | key | rows |
|---|---|---|---|---|---|
| 1 | SIMPLE | users | ref | idx_name | 10 |
- key = idx_name → 使用了
idx_name索引 - type = ref → 索引利用得不错
- rows = 10 → 扫描很少的行,说明索引命中效果好
没走索引的例子
| id | select_type | table | type | key | rows |
|---|---|---|---|---|---|
| 1 | SIMPLE | users | ALL | NULL | 100000 |
- key = NULL → 完全没用索引
- type = ALL → 全表扫描(最差)
6.索引的优缺点
-
优点:
-
加速查询:特别是在进行大量数据检索时,索引能够显著提高查询速度。
-
提高排序和分组效率 :索引有助于加速
ORDER BY和GROUP BY等操作。 -
优化连接查询:在执行多表连接查询时,索引可以提高效率。
-
-
缺点:
-
占用空间:每个索引都需要存储在磁盘上,会占用额外的存储空间。
-
性能开销:插入、删除、更新操作时,索引需要进行相应的更新,这会增加操作的开销。
-
维护成本:随着数据的增加,索引的维护也会变得更加复杂和耗时。
-
总结
索引是数据库中非常重要的性能优化工具,可以极大提高查询效率,但在创建和管理索引时需要谨慎。合理的索引设计可以帮助数据库在大数据量时保持良好的性能,而过多的索引或不合理的索引则会影响写入操作并占用大量存储空间。