【发布时间】:2019-08-08 00:47:21
【问题描述】:
我有一些表必须有一些唯一索引,包括多个列。
例如;
Date | ChannelId | SellerId | ProductId | TotalSale
------------------------------------------------------------------------
2019-08-08 1 1 1 100
2019-08-08 2 1 1 100
2019-08-08 3 1 1 100
2019-08-08 4 1 1 100
我在 Date,ChannelId,SellerId,ProductId 列上有一个唯一索引。
一般情况下,我需要通过唯一索引选择一行。
我的正确查询是
SELECT Date,ChannelId,SellerId,ProductId,Total
FROM Reports
WHERE Date = @Date
AND ChannelId = @ChannelId
AND SellerId = @SellerId
AND ProductId = @ProductId
我知道WHERE 子句中的条件越多,性能就越慢。
我计划在表中添加一个 varchar 键列,以便轻松选择单行。如下所示。
Key | Date | ChannelId | SellerId | ProductId | TotalSale
---------------------------------------------------------------------------------------
2019-08-08_1_1_1 2019-08-08 1 1 1 100
2019-08-08_2_1_1 2019-08-08 2 1 1 100
2019-08-08_3_1_1 2019-08-08 3 1 1 100
2019-08-08_4_1_1 2019-08-08 4 1 1 100
通过这种方式,我将有机会通过单个参数选择一行。
SELECT Date,ChannelId,SellerId,ProductId,Total
FROM Reports
WHERE [Key]= @Key
但是,我不确定这种方法是否是一个好的选择。
我知道varchar 类型的性能会更慢。
我想了解这两种方法的优缺点。
【问题讨论】:
-
我删除了不一致的数据库标签。请仅使用您实际使用的数据库进行标记。有你声望的人应该知道这一点。
-
你不应该那样做。因为我需要 SQL Server 和 Postgresql 的答案。我实际上使用了这两个数据库。
-
那你应该问两个问题。如果你得到一个答案是 Postgres 不能在 SQL Server 上运行,而 SQL Server 一个答案不能在 Postgres 上工作,你会怎么做?你接受哪一个?
-
"我知道 WHERE 子句中的条件越多,性能就越慢。" 这是一个错误的假设。由于数据库必须处理更少的行,它们通常会提高性能。
标签: sql sql-server postgresql indexing