【发布时间】:2017-02-26 02:34:02
【问题描述】:
我有一个非常具体的问题,这是工作面试测试的一部分。
我有这张桌子:
CREATE TABLE Teszt
(
Id INT NOT NULL
, Name NVARCHAR(100)
, [Description] NVARCHAR(MAX)
, Value DECIMAL(20,4)
, IsEnabled BIT
)
这些选择:
SELECT Name
FROM Teszt
WHERE Id = 10
SELECT Id, Value
FROM Teszt
WHERE IsEnabled = 1
SELECT [Description]
FROM Teszt
WHERE Name LIKE '%alma%'
SELECT [Description]
FROM Teszt
WHERE Value > 1000 AND IsEnabled = 1
SELECT Id, Name
FROM Teszt
WHERE IsEnabled = 1
问题是,我应该在这张表的哪个位置放置索引以优化上述查询的性能。没有提供有关该表的其他信息,因此我的答案将包含索引的一般赞成/反对论点,但我不确定上述查询。
我对使用索引优化这些特定查询的想法:
Id 应该有一个索引,看起来像主键,它是 where 子句的一部分;
在 Value 列上创建一个也很好,作为这里 where 子句的一部分;
现在对我来说变得模糊了。对于 Name 列,仅基于上述查询,我可能不应该创建一个,因为它与 LIKE 一起使用,这违背了索引的目的,对吗?
我试图阅读有关索引位列(表中的 isEnabled 列)的所有内容,但我不能说这对我来说更清楚,因为参数范围很广。我应该在上面创建一个索引吗?应该过滤吗?它应该是单独索引的一部分,还是只是其他列的一部分?
同样,这都是理论上的,所以没有关于表格大小或使用情况的信息。
提前感谢您的任何回答!
问候, 汤姆
【问题讨论】:
-
除了
Idnullable之外的所有列吗? -
我猜是的 :)
标签: sql sql-server indexing