当前位置:  开发笔记 > 后端 > 正文

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

如何解决《如何使用多个INNERJOIN加速查询》经验,为你挑选了2个好方法。

我一直在努力将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从命令提示符运行,都需要相同的时间.

所以我的问题如下:

    SQLite是否未针对多个INNER JOIN语句进行优化?

    我在查询中做了一些明显愚蠢的事情(因为我是SQLite的新手),这让它变得如此之慢?

任何人提出了一种完全不同的技术之前,不,我不能切换.我的选择是MS-Access或SQLite.:)

更新: 为SQLite数据库中的每个列分配一个INDEX,将查询时间从8分钟缩短到大约6秒.感谢Larry Lustig解释为什么需要INDEXing.



1> Larry Lustig..:

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

MS Access非常积极地代表您为列编制索引,而SQLite将要求您显式创建所需的索引.因此,Access可能为您索引[描述]或[D],但SQLite中缺少这些索引.我没有在SQLite中使用大量JOIN活动的经验.我在一个Django项目中使用它,只有相对少量的数据,并没有发现任何性能问题.



2> OMG Ponies..:

你有关于参考完整性的问题吗?我问,因为你有没有不必要的联接的印象,所以我重新写了你的查询:

SELECT DISTINCT 
       t.[oCode] AS OptionCode, 
       t.[descShort] AS OptionDescription 
  FROM DESCRIPTIONS t
  JOIN tbl_D_H h ON h.[D] = t.[oCode]
                AND h.[oType] = 'STANDARD'
  JOIN tbl_D_J j ON j.[D] = t.[oCode]
                AND j.[oType] = 'STANDARD'
  JOIN tbl_Y_D d ON d.[D] = t.[oCode]
                AND d.[Y] = '41'
                AND d.[oType] ='STANDARD'
 WHERE t.[oMod] = 'D'

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有