如何制定策略以构建高效性能的数据库索引?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2999个文字,预计阅读时间需要12分钟。
高效的索引策略要求独立列的查询条件不是表达式或函数的参数。例如,在MySQL中,如果查询条件如下:
sqlSELECT actor_id FROM sakila.actor WHERE
那么MySQL不会使用索引。独立的列是指索引列不能是表达式或函数的一部分,例如不能是:
- 表达式的一部分,如 `WHERE LENGTH(actor_id)=5`- 函数的参数,如 `WHERE UPPER(actor_id)='ABC'`
正确的使用方式是直接使用列名:
sqlSELECT actor_id FROM sakila.actor WHERE actor_id='ABC'
高性能的索引策略 独立的列 如果查询的列不是独立的,则MySQL就不会使用索引。独立的列是指索引列不能是表达式的一部分,也不能是函数的参数。 如:
select actor_id FROM sakila.actor where actor_id + 1 = 5;其实屏肉眼你是可以判断出这个actor_id其实就是=4,但是mysql是无法自动解析这个方程式的。这完全是用户行为,我们应该养成习惯,始终将索引列单独放在比较符号的一侧 前缀索引和索引的选择性 有时啊,需要的索引很长的字符列,这样呢会使索引变得大且慢。一个策略是前面提到过的模拟哈希索引。再者呢? 我们可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率。 但是 这样会降低索引的选择性:
索引的选择性=不重复的索引值和数据表的记录总数的比值。 索引的选择性越高则查询的效率越高,因为选择性高的会在查找时过滤掉更多的行。
当然对于blob,text,varchar这种很长类型的列,必须使用前缀索引,mysql不允许索引这些列的完整长度。
本文共计2999个文字,预计阅读时间需要12分钟。
高效的索引策略要求独立列的查询条件不是表达式或函数的参数。例如,在MySQL中,如果查询条件如下:
sqlSELECT actor_id FROM sakila.actor WHERE
那么MySQL不会使用索引。独立的列是指索引列不能是表达式或函数的一部分,例如不能是:
- 表达式的一部分,如 `WHERE LENGTH(actor_id)=5`- 函数的参数,如 `WHERE UPPER(actor_id)='ABC'`
正确的使用方式是直接使用列名:
sqlSELECT actor_id FROM sakila.actor WHERE actor_id='ABC'
高性能的索引策略 独立的列 如果查询的列不是独立的,则MySQL就不会使用索引。独立的列是指索引列不能是表达式的一部分,也不能是函数的参数。 如:
select actor_id FROM sakila.actor where actor_id + 1 = 5;其实屏肉眼你是可以判断出这个actor_id其实就是=4,但是mysql是无法自动解析这个方程式的。这完全是用户行为,我们应该养成习惯,始终将索引列单独放在比较符号的一侧 前缀索引和索引的选择性 有时啊,需要的索引很长的字符列,这样呢会使索引变得大且慢。一个策略是前面提到过的模拟哈希索引。再者呢? 我们可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率。 但是 这样会降低索引的选择性:
索引的选择性=不重复的索引值和数据表的记录总数的比值。 索引的选择性越高则查询的效率越高,因为选择性高的会在查找时过滤掉更多的行。
当然对于blob,text,varchar这种很长类型的列,必须使用前缀索引,mysql不允许索引这些列的完整长度。

