本节要点
索引简介
索引的创建及使用
索引的删除
索引的优缺点
索引简介
对于这样一个查询需求:
(1)、查询2006年6月12日出生的学生有哪些?
SELECT * FROM student WHERE birth_day = '2006-06-12';
假如student表中总共有100多万的学生数据,那么上面这个SQL语句执行的时候,就会从表中的第1条记录开始查起,一起将100多万的数据检索完成后,再返回满足条件的数据。
这样的查询就比较慢。有没有更好的方法呢?
我们可以相像一下,如果我们想快速找到一本书的第10章第2节在哪一页,应该怎么去找呢?
是不是先去翻书本最前面的目录。
对,我们也可以像为书本建目录一样,为表中的数据创建一个目录,这个目录,在SQL语言中,就被称为索引。
通过索引,我们也能快速的找到我们需要的数据。
索引的创建及使用
针对下面这个查询:
SELECT * FROM student WHERE birth_day = '2006-06-12';
我们可以在birth_day字段上创建一个索引,以便提高查询效率:
CREATE INDEX idx_birth_day ON student(birth_day);
这里,idx_birth_day是创建的索引名,student是表名,birth_day是索引字段名。这个索引创建完成后,我们针对birth_day字段的等于、大于、小于的查询可能都会快一些。但对于不等于的查询是无效的。
再比如,查询一年级2班姓名为牛思静的学生信息?
SELECT * FROM student WHERE class_id = 'G0102' AND student_name = '牛思静';
针对这个查询,我们可以创建另一个索引:
CREATE UNIQUE INDEX idx_2 ON student(class_id,student_name);
像这样,多个字段组成的索引,被称为组合索引。
另外要注意,同一张表上的索引名,是不允许重复的。
索引创建完成后,也不需要我们显示的去使用,当我们执行SELECT查询时,数据库会自动会我们匹配最合适的索引。
索引的删除
删除创建完成后,怎么去删除呢?
比如:删除student表上创建的名为idx_2的索引。
DROP INDEX idx_2 ON student;
索引的优缺点
通过上面的讲解,我们知道,创建索引,是为了提高查询表时的速度,包括SELECT、GROUP BY、ORDER BY等操作。而且,当我们创建一个唯一索引时,还可以保证表中数据的唯一性。
但就像书本的目录需要占用书上几页纸张一样,创建索引,也需要占用数据库的物理存储空间。并且当书的内容修改,书的目录也同样需要修改,所以当表中的数据变更时,索引也需要实时的维护,这就需要花费一些时间,并且随着表中数据量的增加,花费的时间也会越来越多。
所以,表上创建的索引,也不是越多越好。我们建议,一张表上的索引,最好不要超过5个。而且组合索引的字段个数,最好也不要超过5个。
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。