MySQL:索引一个只包含不同值的字段?

时间:2017-03-31 09:37:20

标签: mysql indexing

SELECT性能在仅包含不同值的字段上设置索引是否有用?

例如:

order_id
--------
98317490
10928343
82931376
93438473
...

2 个答案:

答案 0 :(得分:2)

当然,与所有索引一样,它很有用 - 如果你有一些在WHERE子句上有这个字段的select语句,那么它很有用。

此字段是否具有不同的值并不重要。

请注意,如果您的字段在数据库中标记为UNIQUE或PRIMARY KEY,那么数据库在技术上已经有了该字段的索引,因此为其添加另一个索引不会改变任何内容。

答案 1 :(得分:2)

  

SELECT性能在仅包含不同值的字段上设置索引是否有用?

这取决于。如果您经常搜索此列,则索引非常有用:

  • WHERE column = value
  • WHERE列BETWEEN和AND b

指数的有用性取决于其选择性。例如,如果您的列包含布尔值,则为:

  • false 99.9%的行
  • 在0.1%的行中为true

然后您可以轻松猜测,使用索引查找“true”值相对于读取整个表格来搜索它们将是一个巨大的提升。

另一方面,使用索引搜索“false”将比不使用索引慢,因为无论如何你都要阅读整个表格,你也可以不费心去处理索引。

如果值都是不同的,那么选择性是最大的,索引将非常有用。也就是说,假设您实际搜索该列!

永远不会使用的索引会降低更新速度。

相关问题