Sql server Sqlserver花了很多时间获取详细信息
我有下面这样的桌子Sql server Sqlserver花了很多时间获取详细信息,sql-server,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
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
这张桌子几乎有10升的记录。每个用户id都有近10k的记录。如果我是通过用户id获取详细信息,那么获取详细信息需要将近5分钟的时间。我要在哪里调音
我在使用下面的查询
Select * from User where user_id ='111'
此表中的总列数约为130列。假设您在(
User\u id
)上定义了正确的索引&只需选择您实际需要的列,我将使用backedSSMS
:
SET NOCOUNT ON
SELECT User_Id, C1, C2, . . .
FROM User
WHERE user_id = 111;
如果user\u id
中没有相对索引,则您必须以较差的性能支付
注意:如果
user\u id
具有数字类型,则无需使用'
如果在id
列上PK是聚集索引,请将其更改为非聚集索引,并在user\u id
列上创建聚集索引
这很可能会使SQL Server使用部分表扫描,由于所有请求的记录都将“彼此靠近”保存,这可能会减少检索值所需的页面读取次数(可以从磁盘“抓取”这些值,而无需进一步的条件检查)。该表上有哪些索引?ID是主键。但是我是按用户id搜索的,它没有任何索引。你从你的查询中得到了10k记录吗?你真的需要所有10k记录吗?当然,给用户id添加一个索引-这是过滤条件!您肯定需要用户id列上的索引编号。在设置“无计数”后也不起作用。这个表有将近130列。但是在插入新记录时,这可能会产生一些影响。是的,当然可能。可以根据表的预期每日增长使用填充因子编制索引,夜间作业应重新组织索引。