像SQL Server中的查询性能问题

时间:2014-02-03 12:30:45

标签: sql-server database performance sql-like

我在SQL Server中使用类似查询。每当我在开头使用通配符运行查询('%testdata'或'%testdata%')时,查询返回的结果非常慢(大约60秒)。我尝试在MySQL中运行相同的查询,结果立即返回(在一秒钟内)。

我有一个非常大的数据库,这会不断增加,恐怕经过一段时间后,查询结果会慢得多。

我正在使用SQL Server 2008 Express。

任何人都知道为什么SQL Server返回的数据比MySQL慢,如果我们运行相同的查询,如果有任何替代方法。

2 个答案:

答案 0 :(得分:4)

两个数据库都以相同的方式处理like。他们正在对数据库进行全表扫描并逐行比较值,假设您有一个基本查询:

select t.*
from table t
where t.col like '%testdata%'

性能差异可能是由于配置问题,环境问题,查询差异或测试差异造成的。两个系统上的硬件是否可比?两个数据库是否都配置为利用可用内存,磁盘和处理器?

在环境方面,两个系统的数据是否真的相同?当您执行计时时,是否清除系统中的缓存以获得可比较的计时?

另一个因素可能是查询实际上是不同的,并且MySQL在优化查询方面做得更好。

当您运行测试时,您是在查看第一次结果的时间还是最后结果的时间?

根据我的经验,我不希望MySQL在这种类型的查询上比SQL Server表现得更好。

答案 1 :(得分:1)

实际上问题是因为我使用的列的类型。我的列类型是nvarchar,当我在应用like查询之前将其转换为我的select查询中的text或varchar时,它开始在10秒内返回结果。

当我在MySQL表中看到列类型是longtext时,我有了这个想法,所以我想在我的SQL Server数据库中转换列类型。

最后我使用了类似下面的查询:

SELECT * FROM table WHERE CONVERT(TEXT, col) LIKE '%data%'

Reference Article