MYSQL|索引
索引是关系数据库中对某一列或多个列的值进行预排序的数据结构
通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。
对于主键,关系数据库会自动对其创建主键索引。使用主键索引的效率是最高的,因为主键会保证绝对唯一。
-- 给student表user_id字段添加了一个索引
ALTER TABLE student ADD INDEX idx_user_id (user_id);
索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高。
反过来,如果记录的列存在大量相同的值,那么越低效
索引的优缺点
可以对一张表创建多个索引。
索引的优点是提高了查询效率,缺点是在插入、更新和删除记录时,需要同时修改索引,因此,索引越多,插入、更新和删除记录的速度就越慢。
唯一索引
当表中不能存储同一个学号,这个时候,就可以给该列添加唯一索引。
-- 为学号student_num建立一个唯一索引
ALTER TABLE student ADD UNIQUE INDEX idx_student_num (student_num);
-- 如果只想建立唯一性,而不建立索引
ALTER TABLE student ADD CONSTRAINT idx_student_num UNIQUE (student_num);
我们在数据库中查询时,如果有相应的索引可用,数据库系统就会自动使用索引来提高查询效率,如果没有索引,查询也能正常执行,只是速度会变慢。
因此,索引可以在使用数据库的过程中逐步优化。
总结:
-
索引就是对字段的预排序,对于排序好的数据,可以直接进行定位,速度自然很快。
-
关系数据库会自动对主键创建索引。
-
索引列的值越散列,效率越高。
-
在增删改记录时,需要同时修改索引,所以索引越多,增删改速度越慢。
References:
https://liaoxuefeng.com/books/sql/introduction/index.html