如何理解SQLite`EXPLAIN QUERY PLAN`结果?

编程之家收集整理的这篇文章主要介绍了如何理解SQLite`EXPLAIN QUERY PLAN`结果?编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经读过连接比子查询更好. @H_502_7@

@H_502_7@但

@H_502_7@

EXPLAIN QUERY PLAN
SELECT Queue.Id,NULL
    FROM Queue
    INNER JOIN LastQueue
    ON Queue.Id=LastQueue.Id
@H_502_7@给

@H_502_7@

Array
(
    [0] => Array
        (
            [selectid] => 0
            [order] => 0
            [from] => 0
            [detail] => SCAN TABLE Queue (~1000000 rows)
        )

    [1] => Array
        (
            [selectid] => 0
            [order] => 1
            [from] => 1
            [detail] => SEARCH TABLE LastQueue USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
        )

)
@H_502_7@而

@H_502_7@

EXPLAIN QUERY PLAN
SELECT Queue.Id,NULL
    FROM Queue
    WHERE (SELECT 1 FROM LastQueue WHERE Queue.Id=LastQueue.Id) IS NOT NULL
@H_502_7@给

@H_502_7@

Array
(
    [0] => Array
        (
            [selectid] => 0
            [order] => 0
            [from] => 0
            [detail] => SCAN TABLE Queue (~500000 rows)
        )

    [1] => Array
        (
            [selectid] => 0
            [order] => 0
            [from] => 0
            [detail] => EXECUTE CORRELATED SCALAR SUBQUERY 1
        )

    [2] => Array
        (
            [selectid] => 1
            [order] => 0
            [from] => 0
            [detail] => SEARCH TABLE LastQueue USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
        )

)
@H_502_7@我想我必须乘以行数才能了解成本.我是对的?

@H_502_7@然后,

@H_502_7@>使用join:1000000 * 1
>使用子查询:500000 * 1 * 1

@H_502_7@那么,子查询是否比加入更快?

@H_502_7@是否有一个很好的教程来学习如何理解EXPLAIN / EXPLAIN QUERY PLAN结果?

@H_502_7@为什么它说SCAN TABLE Queue是~1000000和~500000,那个表有76行?

解决方法

EXECUTE CORRELATED SCALAR SUBQUERY 1行就在那里,因为您使用的是不同的查询语法. @H_502_7@

@H_502_7@在两种情况下实际执行都是相同的:sqlite遍历Queue表的所有记录,并尝试在LastQueue表中查找相应的记录.

@H_502_7@估计的记录计数不同对您来说无关紧要,因为您知道实际的记录数是相同的.

@H_502_7@连接可能比其他数据库中的子查询更好,但在仅使用嵌套循环连接的sqlite中,唯一的区别是连接允许sqlite在连接中选择外部和内部表.

@H_502_7@在任何情况下,您都应该以最简单和可维护的方式编写查询,并且只有在您已经测量到您得到明显且必要的改进时才对其进行优化.

@H_502_7@请注意,而不是:

@H_502_7@

WHERE (SELECT ...) IS NOT NULL
@H_502_7@写下来会更加惯用:

@H_502_7@

WHERE EXISTS (SELECT ...)

总结

以上是编程之家为你收集整理的如何理解SQLite`EXPLAIN QUERY PLAN`结果?全部内容,希望文章能够帮你解决如何理解SQLite`EXPLAIN QUERY PLAN`结果?所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群:1065694478(已满)
编程之家官方2群:163560250(已满)
编程之家官方3群:312128206(已满)
编程之家官方4群:230427597

相关文章

猜你在找的Sqlite相关文章

安装 在Windows上安装SQLite。 访问官网下载下Precompliled Binaries for Windows的两个压缩包。 创建sqlite文件夹,路径不要包含中文,把压缩包的内容解压
一、安装 下载地址:http://www.sqlite.org/download.html 将Precompiled Binaries for Windows下的包下载下来sqlite-dll-win
关于SQLite SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如iOS、Android)。 然而免费版的SQLite有一个致命缺点:不支持加密。这就导致存储在SQLite中的数据可以被任何人用任何文本编辑器查看到。比如国内某团购iOS客户端的DB缓存数据就一览无余: SQLite加密方式
在我眼里,MySQL和Oracle是这样的 而SQLite在是这样的 所以这么萌的数据库,我真的应该多了解她的。 简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。它的设计目标是嵌入式的,目前Android和iOS的设备内置的都是SQLite数据库。SQLite虽然娇小,但也支持事务和多数的SQL92标准。 主要特点 Zero-Configuration 无需安装和管理
(点击上方蓝字,快速关注我们) 作者:空之境界 网址:http://supermao.cn/sqlitezhe-yao-jiao-xiao-ke-ai-bu-duo-liao-jie-dian-du-bu-xing-a/ 在我眼里,MySQL和Oracle是这样的 而SQLite在是这样的 所以这么萌的数据库,我真的应该多了解她的。 简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数
SQLITE3 使用总结 投稿:hebedich 字体:[ 增加  减小] 类型:转载 时间:2014-08-19 Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记。也希望能对大家有所帮助。 前序: 这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台。我以前的工作