SELECT a,b,c FROM t WHERE status!="deleted"
status
的可能值为“有效”,“已删除”,“待定”等。
应该{{1}}编入索引吗?请解释为什么你觉得它应该或不应该。
EDIT。 t将拥有一堆记录。他们会定期删除。我将添加一个名为“status”的列,而不是删除它们,表示它们是否被删除。
答案 0 :(得分:1)
使用
进行查询WHERE status!="deleted"
谓词基于B-Tree(和Hash)的索引将毫无用处。仅仅因为他们没有优化!=
运营商。
因此,如果符合以下条件,那么将索引覆盖status
作为其最左侧的部分将非常有用:
=
比较(或IN (...)
) PS:如果上面的两个项目是这样的话 - 值得研究实际使用基于Hash
的索引。
答案 1 :(得分:0)
如果您真的要拥有那么多行,那么它可能值得拥有,例如一个小的int status_id,链接到具有实际状态的表。这样可以节省存储空间,提高索引效率,并且搜索效率可能更高,因为它是一个整数比较而不是逐个字符串的比较。