Sql server 数据库表优化
我有客户名单。该表中有大约200万条记录。该表具有以下结构: ID(int)、FLM、电子邮件、地址、电话、日期;除BDay外的每种nvarchar类型 我在ID和FLM列上有两个非聚集索引。当我执行查询时,例如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对象中指
SELECT * FROM tbl where FLM LIKE 'value'
我在大约1分钟内遇到延迟。因此,问题:
- 在FLM上添加聚集索引会改变性能吗
- 我还可以在这里优化什么
我如何从程序中获得结果?使用
SqlConnection
进行连接,然后在SQlCommand
对象中指定查询,然后通过DataReader
获取数据。也许在这里我可以优化它以获得更好的结果(可能通过使用数据集)?使ID成为聚集索引而不是非聚集索引。仅考虑您发布的查询,FLM列上的非聚集索引不会做任何事情,因此您可以删除它
希望聚集索引能提高性能。价值是什么形式?是否使用通配符
“%value%”
?“展示计划”展示了什么?如果在模式中使用初始%,我怀疑正在进行表扫描。是的,我使用的是通配符,这就是为什么在查询like,not=语句中使用通配符。但即使我不使用通配符,我也要等那么久。根据经验,表应该有聚集索引。您应该在具有最多唯一行且是增量的列上创建聚集索引。聚集索引也不应该太宽,所以避免在字符串列上使用聚集索引。@Ben在我的计划表中进行扫描,花费99%。这是指全扫描吗?是的,这是指全扫描。因为您正在执行“select*”并使用通配符,SQl认为“无论如何,我都必须读取整个表,最好还是第一次读取”。要使用索引,请指定索引提示。