在 MySQL 数据库中创建索引的主要原因是为了提高查询性能。
主要作用
-
提高查询性能:
- 索引可以显著提高数据检索的速度。对于大数据集,使用索引可以避免全表扫描,从而加快查询速度。例如,当在一个包含数百万条记录的表中查找特定记录时,索引可以将搜索时间从几秒甚至几分钟缩短到毫秒级。
-
加速排序和分组操作:
- 索引可以加速
ORDER BY
、GROUP BY
和聚合函数(如COUNT
、SUM
)的操作。对于需要排序或分组的大量数据,索引可以极大地提高这些操作的性能。
- 索引可以加速
-
强制唯一性:
- 索引可以用来强制表中的某些列的值是唯一的。例如,主键(PRIMARY KEY)索引和唯一(UNIQUE)索引确保了某列或某几列的值在表中没有重复。这对于数据完整性和一致性非常重要。
-
加速联接(JOIN)操作:
- 当对多个表进行联接操作时,索引可以显著提高联接效率。通过在被联接的列上创建索引,可以加速表之间的匹配过程。
1、主键索引
表结构:
为svip表的vip_id字段添加主键索引(PRIMARY KEY):
ALTER TABLE svip ADD PRIMARY KEY (vip_id)
执行结果:
一张表只能有一个主键索引,再次添加会报重复主键:
2、普通索引
ALTER TABLE svip ADD PRIMARY KEY (vip_id)
为svip表的vip_name字段添加普通索引(INDEX),索引名字叫index_name:
表结构:
3、唯一索引
为svip表的vip_cardID字段添加唯一索引(UNIQUE):
ALTER TABLE svip ADD UNIQUE (vip_cardID)
4、全文索引
为svip表的vip_mark字段添加全文索引(FULLTEXT)
ALTER TABLE svip ADD FULLTEXT (vip_mark)
5、联合索引
为svip表的字段vip_phone和vip_address添加联合(多列)索引:
ALTER TABLE svip ADD INDEX index_contact (vip_phone,vip_address)
6、查询索引
查询svip表索引:
SHOW INDEX FROM svip
7、删除索引
删除svip表的index_contact索引:
DROP INDEX index_contact ON svip
注意事项
-
索引的代价:
- 索引加速查询速度,但也会增加存储空间的使用。同时,插入、更新和删除操作可能会因为需要维护索引而变慢。
-
选择合适的列创建索引:
- 不是所有列都需要索引。创建索引应针对查询频繁的列,特别是那些用于
WHERE
、ORDER BY
、JOIN
和聚合函数中的列。
- 不是所有列都需要索引。创建索引应针对查询频繁的列,特别是那些用于
-
避免过多索引:
- 虽然索引有助于查询性能,但过多的索引会影响写操作的性能,并增加维护索引的开销。
总结
创建索引的主要原因是提高查询性能。通过正确设计和使用索引,可以大幅提升数据库操作的效率,尤其是在处理大量数据时。了解和合理使用索引是数据库设计和优化的重要部分。