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 数据库表优化_Sql Server_Database - Fatal编程技术网

Sql server 数据库表优化

Sql server 数据库表优化,sql-server,database,Sql Server,Database,我有客户名单。该表中有大约200万条记录。该表具有以下结构: ID(int)、FLM、电子邮件、地址、电话、日期;除BDay外的每种nvarchar类型 我在ID和FLM列上有两个非聚集索引。当我执行查询时,例如 SELECT * FROM tbl where FLM LIKE 'value' 我在大约1分钟内遇到延迟。因此,问题: 在FLM上添加聚集索引会改变性能吗 我还可以在这里优化什么 我如何从程序中获得结果?使用SqlConnection进行连接,然后在SQlCommand对象中指

我有客户名单。该表中有大约200万条记录。该表具有以下结构:

ID(int)、FLM、电子邮件、地址、电话、日期;除BDay外的每种nvarchar类型

我在ID和FLM列上有两个非聚集索引。当我执行查询时,例如

SELECT * FROM tbl where FLM LIKE 'value'
我在大约1分钟内遇到延迟。因此,问题:

  • 在FLM上添加聚集索引会改变性能吗
  • 我还可以在这里优化什么

我如何从程序中获得结果?使用
SqlConnection
进行连接,然后在
SQlCommand
对象中指定查询,然后通过
DataReader
获取数据。也许在这里我可以优化它以获得更好的结果(可能通过使用数据集)?

使ID成为聚集索引而不是非聚集索引。仅考虑您发布的查询,FLM列上的非聚集索引不会做任何事情,因此您可以删除它


希望聚集索引能提高性能。

价值是什么形式?是否使用通配符
“%value%”
?“展示计划”展示了什么?如果在模式中使用初始%,我怀疑正在进行表扫描。是的,我使用的是通配符,这就是为什么在查询like,not=语句中使用通配符。但即使我不使用通配符,我也要等那么久。根据经验,表应该有聚集索引。您应该在具有最多唯一行且是增量的列上创建聚集索引。聚集索引也不应该太宽,所以避免在字符串列上使用聚集索引。@Ben在我的计划表中进行扫描,花费99%。这是指全扫描吗?是的,这是指全扫描。因为您正在执行“select*”并使用通配符,SQl认为“无论如何,我都必须读取整个表,最好还是第一次读取”。要使用索引,请指定索引提示。