应删除SQL表中的状态列的索引

时间:2014-07-11 01:30:13

标签: mysql sql

SELECT a,b,c FROM t WHERE status!="deleted"

status的可能值为“有效”,“已删除”,“待定”等。

应该{​​{1}}编入索引吗?请解释为什么你觉得它应该或不应该。

EDIT。 t将拥有一堆记录。他们会定期删除。我将添加一个名为“status”的列,而不是删除它们,表示它们是否被删除。

2 个答案:

答案 0 :(得分:1)

使用

进行查询
WHERE status!="deleted"

谓词基于B-Tree(和Hash)的索引将毫无用处。仅仅因为他们没有优化!=运营商。

因此,如果符合以下条件,那么将索引覆盖status作为其最左侧的部分将非常有用:

  1. 您正在使用=比较(或IN (...)
  2. 要选择的行数较少(相对于总行数)。
  3. PS:如果上面的两个项目是这样的话 - 值得研究实际使用基于Hash的索引。

答案 1 :(得分:0)

如果您真的要拥有那么多行,那么它可能值得拥有,例如一个小的int status_id,链接到具有实际状态的表。这样可以节省存储空间,提高索引效率,并且搜索效率可能更高,因为它是一个整数比较而不是逐个字符串的比较。