SQLE查询速度与LEFT OUTER JOIN中的SQL服务器的LIKE条件

时间:2015-06-19 17:14:16

标签: sql-server database sqlite outer-join sql-like

我们的应用程序允许用户(1)以存储在本地机器上的SQLite格式访问我们的数据库,或(2)使用同一网络上的服务器上的SQL服务器访问我们的数据库。出于这个问题的目的,它是一个或另一个设置选择。

我正在测试这两个设置以检查一切是否正常。

我正在运行一个实质上如下的查询:

INSERT INTO [#Temp_main]
SELECT T1.ID, T2.ID
FROM [#Temp_other] T1
LEFT OUTER JOIN [Table_with_lots_of_data] T2 ON ((T2.ID LIKE T1.ID+'%')

(对于此查询的SQLite版本,连接运算符是'||',我昨天从Stackoverflow中学到了,谢谢!)。

所以#Temp_other只有ID的前几个字符,与ID中的Table_with_lots_of_data列匹配,结果保存在{{1} }}

一切都运行良好,但查询的SQLite版本比查询SQL服务器要慢得多。还要记住SQL Server版本还有在本地网络上运行的额外延迟(我推测),而SQLite数据库在同一台机器上。

我不确定这是否是预期的?任何帮助/建议/确认将不胜感激。

我们正在使用SQL Server Express 2014. #Temp_main中的信息在我们测试的SQLite和SQL服务器版本上完全相同。它包含大约150 000行,25列。

1 个答案:

答案 0 :(得分:1)

在SQLite中,LIKE带有非常数的第二个运算符cannot be optimized

如果你不需要不区分大小写,并且知道ID的结构,你可以使用这样的东西,它可以使用T2.ID上的索引(在两个数据库中):

SELECT T1.ID, T2.ID
FROM [...] T1
LEFT JOIN [...] T2 ON T2.ID BETWEEN T1.ID AND T1.ID || 'zzzzz'
相关问题