我有下面的表格,
Id(Pk) User_Id C1 C2 C3 C4
1 111 2 a b c
2 111 5 d e f
3 111 7 a f ty
4 222 2 a b c
5 222 5 d e f
6 222 7 a f ty
该表几乎有10L条记录。每个user_id都有近1万条记录。如果我通过User_id获取详细信息,则将花费近5分钟的时间来获取详细信息。我必须在哪里调整?
我正在使用以下查询
Select * from User where user_id ='111'
此表中的列总数约为130列。
答案 0 :(得分:0)
假设您在(User_id
)上定义了正确的索引,并选择了您真正想要的列,那么我将使用支持的SSMS
:
SET NOCOUNT ON
SELECT User_Id, C1, C2, . . .
FROM User
WHERE user_id = 111;
如果user_id
中不存在相对索引,则您必须以较差的表现来付款。
注意:如果user_id
具有数字类型,则无需使用''
。
答案 1 :(得分:0)
如果您在Id
列上的PK是聚集索引,请将其更改为非聚集索引,然后在User_Id
列上创建聚集索引。
这很可能使SQL Server使用部分表扫描,并且由于所有请求的记录将“彼此靠近”保存,因此这可能会减少检索值所需的页面读取次数(可以“抓取”)从磁盘上进行,无需进一步的条件检查。