1

资源1​​28 GB RAM,6 TB空间,Sql server 2014企业版。如何在以下情况下提高sql性能

问题:我们的DB有几张表,包括每个200GB(约)的5个“只读表”。 这5个表中的每一个都有5列(所有列(varchar 100))。 每列都有重复的字符串或值。两列(col3和col4)有大约3500个独特的字符串或重复值。

我们唯一的查询是'select col1 ......(all columns)from table x where col1 like'searchstring%'or col2 like'searchstring%'(只有两个col被查询OR子句),因为这些是唯一的匹配标准。

目前查询需要1小时到1.5小时才能返回带有当前索引的结果。 我想知道是否有一种有效的方法在5到10分钟内得到结果。 谢谢

+0

你能发表您的查询吗?和表的创建脚本? –

+0

假设你的OR条件将在小括号()中,例如,在哪里(col1就像'searchstring%'或col2就像'searchstring%')。和使用With(Nolock),例如从表x(与Nolock) –

+0

尝试更改您的“喜欢”,以“包含”,看看是否有帮助:http://stackoverflow.com/questions/7510646/like-vs-contains-on-sql-server – User2012384

回答

0

这一切都取决于您的数据库,但我建议尝试拆分2中的查询来删除OR。

我还建议调查功能索引,例如,您可能可以对前10个字符进行索引,然后查询可能会更快。

尝试一切,你永远不知道会发生什么。

1

进入SQL Server Managment Studio并查看execution plan的查询。这将向您显示任何建议的索引以及限速步骤(如io)。确保你没有cardinality mismatching,并且在大桌上确保你保持你的statistics是最新的。