我有一个包含以下列的表
Id (int)
UniqueId (string)
CategoryId (int)
Id和UniqueId对于每条记录都是唯一的。
我希望找到基于UniqueId
值的记录,而且我还有CategoryId
值。
在SELECT
语句中指定两个过滤器是否更快,例如:
SELECT * FROM [Products] Where [UniqueId] = 'product' AND [CategoryId] = 4
或者我应该使用[UniqueId]
过滤器吗?
该表有很多记录
编辑:
我没有产品的[Id]
列
答案 0 :(得分:2)
我认为最好使用唯一的ID过滤器来做这件事,也不要忘记在UniqueId上放一个索引,以便更快地过滤。
我更喜欢将索引放在我想要过滤的列上(在where子句中使用)。
答案 1 :(得分:2)
这将取决于您是否在表上有索引,索引包含哪些列以及索引的实际顺序。
如果你有一个列(UniqueId, CategoryId)
的索引,并且设置了相应的列,那么你的查询应该没问题。
在包含的列中添加其他必需列将避免使用键查找来检索选择中的列。
这也是你几乎不应该使用SELECT *
您最好的选择是查看执行计划,并尝试避免任何表扫描/密钥查找
之类的内容答案 2 :(得分:0)
我认为过滤哪个列的索引会更快。
如果它们都被编入索引,我认为仅对一列进行过滤会更快,因为对于每个列过滤器,服务器必须进行需要花费时间的处理。
答案 3 :(得分:0)
我建议,只需在uniqueid上创建一个非聚集索引,然后只使用该字段作为过滤器
答案 4 :(得分:0)
如果您没有任何索引,那么
SELECT *
FROM [Products]
WHERE [UniqueId] = 'product'
如果您有任何列的索引,请在where
子句中使用该列。
如果您在UniqueId
和CategoryId
都有索引,那么您的查询
SELECT *
FROM [Products]
WHERE [UniqueId] = 'product' AND [CategoryId] = 4
很好
答案 5 :(得分:0)
只需过滤Uniqueid
即可。 SQL服务器甚至不会查看其他列,因为唯一索引提供最快的排序(O = log2N)
答案 6 :(得分:0)
首先
仅拉您想要提取的
我相信,你有[CategoryId]有集群索引。所以你应该使用filter [CategoryId]来记录。不要使用产品过滤器
你的查询将是
SELECT * FROM [Products] Where [CategoryId] = 4