首页 > 解决方案 > SQLite 与其他数据库中的交叉连接

问题描述

我在玩 SQLite,但CROSS JOINS在非常小的数据集上遇到了一个奇怪的性能问题。例如,我在 SQLite 中执行的任何交叉连接都比 mysql 中的相同交叉连接花费大约 3 倍或更长的时间。例如,下面是 mysql 中 3,000 行的示例:

select COUNT(*) from (
    select * from main_s limit 3000
) x cross join (
    select * from main_s limit 3000
) x2 group by x.territory

SQLite 是否使用与其他客户端-服务器数据库不同的算法或其他东西来进行交叉连接或其他类型的连接?我在单个表/数据库上使用 SQLite 很幸运,但是每当加入表时,它似乎变得有点问题。

标签: mysqlalgorithmsqlitejoin

解决方案


SQLite 是否使用与其他客户端-服务器数据库不同的算法或其他东西来进行交叉连接或其他类型的连接?

是的。SQLite 使用的算法非常简单。在 SQLite 中,连接作为嵌套循环连接执行。数据库遍历一个表,并且对于每一行,从另一个表中搜索匹配的行。

SQLite 无法弄清楚如何使用索引来加快连接速度,如果没有索引,k 路连接所需的时间与 N^k 成正比。例如,MySQL 创建了一些“幽灵”索引,这有助于加快迭代过程。


推荐阅读