SQLServer获取大量时间来获取详细信息

时间:2018-08-31 10:56:06

标签: sql-server

我有下面的表格,

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列。

2 个答案:

答案 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使用部分表扫描,并且由于所有请求的记录将“彼此靠近”保存,因此这可能会减少检索值所需的页面读取次数(可以“抓取”)从磁盘上进行,无需进一步的条件检查。