2011-04-22 58 views
1

一个特定的表我有一个整数“请将isDeleted”字段缺省值为0
基本上此字段标志作为开始删除或不连续。现在,在查询时,我将根据是否设置此标志指定获取记录。我应该使用索引在这些类型的属性的

设置此属性的索引值得吗?

+0

良好的指数通常必须非常**选择性**,例如,在给定的一组数据中,提取2-5%的数据行。如果你的'IsDeleted'标志符合那个标准 - 那么是的,你可以索引它并看到好处。如果你有20%,30%,50%的删除行,那么很可能索引编制根本没有任何帮助...... – 2011-04-22 11:26:52

回答

0

如果删除的记录比现场(或反之亦然)多得多,那么查询最少使用的类型将受益于索引。

说,如果记录1%被删除,您要查询

SELECT * 
FROM records 
WHERE isDeleted = 1 

,优化器会选择索引,而该查询:

SELECT * 
FROM records 
WHERE isDeleted = 0 

将使用全表扫描。

如果没有删除的未保留记录的数量低于临界点(这取决于记录大小和其他事项,但作为经验法则可以被认为是10%),那么索引可能永远不会被使用。

0

如果你正在使用MySQL,你应该使用BIT datatype这种操作有关布尔检查,而不是整数。 (见http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html)。

True and False分别对应于1和0。

对于那些您指定值为1的查询,列上的索引可能值得,对于0,不。细节here

相关问题