我有一个员工表,其中id是其主键。它包含五十万甚至更多行,并且只有不到十名被解雇的员工。查找它们的最佳方法是什么?
SELECT id, name, mode
FROM employees
WHERE mode = 'fired'
表
CREATE TABLE [dbo].[employee](
[id] [int] IDENTITY(27,1) NOT NULL,
[name] [varchar](255) NULL,
[mode] [varchar](45) NOT NULL)
答案 0 :(得分:2)
正如sidux所说,你应该在模式列上创建一个索引。
为sidux回答添加更多选项,在我看来,你应该有另一张表,其中包含有关员工状态的元数据信息,并将该表的FK作为员工的状态,替换模式列(id,name, statusId)。这将允许您创建一个较小的索引,并在按状态ID过滤(创建索引)时获得更好的性能
答案 1 :(得分:1)
您可以创建NON CLUSTERED条件索引。
CREATE NON CLUSTERED INDEX ix_employees_firedEmployees ON employees (name) INCLUDE (mode) WHERE mode = 'fired';
但在实践中,更好的方式是有标志或状态来表明这样的员工。例如状态CHAR(1)='F'或IsFired BIT = 1