mysql 高性能索引策略

时间:2022-06-11 19:58:31

在mysql数据库中,正确的创建索引并且恰当的使用索引,是提高性能的很重要的方面,下面介绍一下如何有效并且高效的使用索引

1.隔离的使用列

在mysql中如果没有隔离创建的索引的列,则建立的所以不会起作用。“隔离”的含义是:他不是表达式的一部分,也没有位于函数中,例如下面的索引就不会起作用

select * from people where id + 1 = 3;这种情况下id是索引咧也不会起到索引的作用,放在表达式中也是一样。

2.前缀索引和索引选择性

有的时候如果需要索引很长的字符咧,就会使得索引变大并且变慢,因此如果索引BLOB和TEXT列,或者非常长的VACHAR列,就必须定义索引前缀,因为mysql不会允许索引他们的全文,但是如何选择合适的前缀的长度呢?计算选择率,一般的前缀的选择率能接近0.31,基本上就可以了:

select count(distinct left(city,7))/count(*) as sel from city_demo;(其中的city为索引列)

找到了合适的前缀长度之后,如何创建前缀索引呢?alter table city_demo add KEY(city(7))

注意:mysql不能在ORDER BY或者GROUP BY查询中使用前缀索引

3.聚集索引

一般只有solidDB和InnoDB支持聚集索引

4.避免多余索引和重复索引

一般的mysql会给主键或者UNIQUE约束默认加上索引,不需要再创建索引了。

重复索引则是,如果创建了(A,B)的索引,则再不需要创建的A的索引了,mysql支持最左前缀索引

向有更多索引的表中插入新行会慢的多。这通常是正确的:添加新索引可能会对INSERT,UPDATE,DELETE有较大的性能影响,尤其是新索引遇到内存限制的时候

5.在任何可能的地方,都要试着扩展索引,而不是新增索引。通常维护一个多列索引比维护多个单列索引容易的多。