我在SQL Server中使用类似查询。每当我在开头使用通配符运行查询('%testdata'或'%testdata%')时,查询返回的结果非常慢(大约60秒)。我尝试在MySQL中运行相同的查询,结果立即返回(在一秒钟内)。
我有一个非常大的数据库,这会不断增加,恐怕经过一段时间后,查询结果会慢得多。
我正在使用SQL Server 2008 Express。
任何人都知道为什么SQL Server返回的数据比MySQL慢,如果我们运行相同的查询,如果有任何替代方法。
答案 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%'