gpt4 book ai didi

sql - 如何使用多个 INNER JOIN 加速查询

转载 作者:IT王子 更新时间:2023-10-29 06:24:57 25 4
gpt4 key购买 nike

为了满足简单的数据库需求,我一直在尝试从 ms-access 文件切换到 SQLite 文件;出于通常的原因:较小的文件大小、较少的开销、开源等。

阻止我进行转换的一件事是 SQLite 似乎缺乏速度。对于简单的 SELECT 查询,SQLite 的性能似乎与 MS-Access 一样好,甚至更好。带有多个 INNER JOIN 语句的相当复杂的 SELECT 查询会出现此问题:

SELECT DISTINCT 
DESCRIPTIONS.[oCode] AS OptionCode,
DESCRIPTIONS.[descShort] AS OptionDescription
FROM DESCRIPTIONS
INNER JOIN tbl_D_E ON DESCRIPTIONS.[oCode] = tbl_D_E.[D]
INNER JOIN tbl_D_F ON DESCRIPTIONS.[oCode] = tbl_D_F.[D]
INNER JOIN tbl_D_H ON DESCRIPTIONS.[oCode] = tbl_D_H.[D]
INNER JOIN tbl_D_J ON DESCRIPTIONS.[oCode] = tbl_D_J.[D]
INNER JOIN tbl_D_T ON DESCRIPTIONS.[oCode] = tbl_D_T.[D]
INNER JOIN tbl_Y_D ON DESCRIPTIONS.[oCode] = tbl_Y_D.[D]
WHERE ((tbl_D_E.[E] LIKE '%')
AND (tbl_D_H.[oType] ='STANDARD')
AND (tbl_D_J.[oType] ='STANDARD')
AND (tbl_Y_D.[Y] = '41')
AND (tbl_Y_D.[oType] ='STANDARD')
AND (DESCRIPTIONS.[oMod]='D'))

在 MS-Access 中,此查询的执行时间约为 2.5 秒。在 SQLite 中,它需要 8 个多一点的分钟。无论我是从 VB 代码运行查询还是从使用 sqlite3.exe 的命令提示符运行查询,都需要相同的时间。

所以我的问题如下:

  1. 难道 SQLite 没有针对处理多个 INNER JOIN 语句进行优化吗?
  2. 我是否在我的查询中做了一些明显愚蠢的事情(因为我是 SQLite 的新手)导致它如此缓慢?

而且在任何人提出完全不同的技术之前,不,我不能切换。我的选择是 MS-Access 或 SQLite。 :)

更新:为 SQLite 数据库中的每一列分配一个索引将查询时间从 8 多分钟减少到大约 6 秒。感谢Larry Lustig用于解释为什么需要索引。

最佳答案

根据要求,我将我之前的评论重新发布为实际答案(当我第一次发布评论时,出于某种原因我无法将其作为答案发布):

MS Access 非常积极地代表您为列建立索引,而 SQLite 将要求您显式创建所需的索引。因此,Access 可能已为您编制了 [Description] 或 [D] 索引,但 SQLite 中缺少这些索引。我没有在 SQLite 中处理那么多 JOIN 事件的经验。我在一个数据量相对较小的 Django 项目中使用它,没有发现任何性能问题。

关于sql - 如何使用多个 INNER JOIN 加速查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1561302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com