MySQL Mysql covering vs composite vs column index


<!–

–>

MySQL Mysql covering vs composite vs column index

在MySQL中,索引是优化查询性能的重要手段之一。索引类型包括覆盖索引、复合索引和列索引。

阅读更多:

覆盖索引(Covering Index)

当一个查询语句可以直接从索引中获取需要的所有字段信息,而无需再查询数据行,这种索引就被称为覆盖索引。

(adsbygoogle = window.adsbygoogle || []).push({});

例如,有一个表t1,其中有列a、b、、d。当需要查询SELECT a,b FROM t1 WHERE =1 AND d=2时,可以为列c和d建立一个复合索引,但只有当这个索引包含了列a和b时,才能成为覆盖索引。

注意,覆盖索引适用于查询的列在索引中已经包含,但并不适用于包含大量行的表。此时,查询需要遍历整张表的索引来获取数据,反而会变得更慢。

复合索引(Composite Index)

复合索引是由多列组成的一个索引,常见的情况是把几个列合并成一个索引,形成复合索引,因为在对表进行查询的时候,经常需要根据多个列进行查询,那么这个时候就应该把这些列进行合并,形成一个复合索引。

例如,有一个表t2,其中有列a、b、c、d。当需要查询SELECT * FROM t2 WHERE a=1 AND b=2 AND c=3时,可以为列a、b、c建立一个复合索引,这样查询时索引就可以直接定位到需要的数据,提高查询效率。

需要注意的是,复合索引的建立顺序非常重要。以上面的例子为例,若索引建立顺序为(a,b,c)即可优化查询,但如果建立顺序为(c,b,a)则无法优化查询,因为查询时无法直接定位到需要的数据。

列索引(Column Index)

列索引是指只包含了一个列的索引。与复合索引不同,列索引只包含单个列,但是可以有多个列索引。

(adsbygoogle = window.adsbygoogle || []).push({});

例如,有一个表t3,其中有列a、b、c、d。当需要查询SELECT * FROM t3 WHERE a=1时,可以为列a建立一个列索引。

需要注意的是,在某些情况下,可能需要对某些列建立多个列索引,以满足不同查询语句的需要。

总结

覆盖索引可以让查询语句从索引中直接获取需要的数据,提高查询效率。复合索引和列索引都是通过建立索引来提高查询效率,但复合索引需要注意建立顺序,而列索引可以针对不同的查询语句建立多个索引。在实际应用中,需要根据查询语句的特点选择不同的索引类型,达到最优的查询效果。