数据库索引及其使用

来源:互联网 发布:适合家政的软件 编辑:程序博客网 时间:2024/06/05 15:13

        前一阵子,在数据库上吃了不少的亏,这次来总结一下数据库中的索引,对于提升大量数据的查询速度很有帮助。


一、为什么要用索引


        一般少量的数据,可能不是很明显,但是到了大量的数据马上就显示出来索引的有点了。我们在创建数据表主键的时候,会自动创建一个唯一性的索引,用来保证数据表中每一行的唯一性。

        可以通过索引的建立,大大加快数据检索的速度(查询),同时也可以加速表和表之间的联系,从而实现数据参考的完整性。

        索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。上述SQL语句,在没有索引的情况下,数据库会遍历全部200条数据后选择符合条件的;而有了相应的索引之后,数据库会直接在索引中查找符合条件的选项。如果我们把SQL语句换成“SELECT * FROM article WHERE id=2000000”,那么你是希望数据库按照顺序读取完200万行数据以后给你结果还是直接在索引中定位呢?

        索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。


二、索引的分类


        1、普通索引(非聚焦索引):是最基本的索引,没有任何限制。一般为BTree类型,也是我们大多数情况下用到的索引。

        2、唯一索引:与普通索引类似,索引列值必须唯一,但允许有空值。

        3、全文所以(FULLTEXT):FULLTEXT索引仅可用于 MyISAM 表;他们可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或CREATE INDEX被添加。////对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。

        4、单列索引、多列索引:多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。


三、聚焦和非聚焦索引


         

        上表很好的反应了聚合索引和非聚合索引的使用上的一些区别还有需要注意的地方,对于一些标记型字段都需要注意一下,不要建立没有意义的索引。