Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Sqlserver花了很多时间获取详细信息_Sql Server - Fatal编程技术网

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
)上定义了正确的索引&只需选择您实际需要的列,我将使用backed
SSMS

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列。但是在插入新记录时,这可能会产生一些影响。是的,当然可能。可以根据表的预期每日增长使用填充因子编制索引,夜间作业应重新组织索引。