mysql - 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 很幸运,但是每当加入表时,它似乎变得有点问题。
解决方案
SQLite 是否使用与其他客户端-服务器数据库不同的算法或其他东西来进行交叉连接或其他类型的连接?
是的。SQLite 使用的算法非常简单。在 SQLite 中,连接作为嵌套循环连接执行。数据库遍历一个表,并且对于每一行,从另一个表中搜索匹配的行。
SQLite 无法弄清楚如何使用索引来加快连接速度,如果没有索引,k 路连接所需的时间与 N^k 成正比。例如,MySQL 创建了一些“幽灵”索引,这有助于加快迭代过程。
推荐阅读
- python - 熊猫改变列的顺序
- python - 在python中将十六进制字符串转换为十六进制数字
- javascript - 如何在 Promise 中使用 async/await - Vue
- c# - MPXJ C# - 资源分配计数
- nativescript - Nativescript - 在 textView 中居中水平文本、动态文本和多行
- c - sqlite3_bind_text、sqlite3_bind_text16 和 sqlite3_bind_text64 有什么区别?
- java - 将 .gif 图像作为图标添加到输出窗口
- php - Laravel + Vue 无法将数据保存到我的数据库
- sql - 如何从 BigQuery 获取 UTC 中的当前 TIMESTAMP?
- python - Opencv - python - 从线段检测器(LSD)连接线段以形成一条线