浅谈SQLite——查询处理和优化.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈SQLite——查询处理及优化查询处理及优化是关系数据库得以流行的根本原因,也是关系数据库系统最核心的技术之一。SQLite的查询处理模块非常的精致,而且很容易移植到不支持SQL的存储引擎,Berkeley DB最新的版本已经将其完整的移植过来。本文将简要的讨论一下SQLite的查询处理及优化。???? 查询处理一般来说,包括词法分析、语法分析、语义分析、生成执行计划以及计划的执行几个部分。SQLite的词法分析器是手工写的,语法分析器由Lemon生成,语义分析主要的进行语义方面的一些检查,比如table是否存在等。而执行计划的生成及执行是最核心的两部分,也是相对比较复杂、有点技术含量的东西。SQLite的执行计划采用了虚拟机的思想,实际上,这种基于虚拟机的思想并非SQLite所独有,但是,SQLite将其发挥到了极致,它生成的执行计划非常详细,而且很容易读(在这里,我不得不佩服D. Richard Hipp在编译理论方面的功底)。1、语法分析——语法树词法分析本身比较简单,这里就不谈了。语法分析的主要任务就是对用户输入的SQL语句进行语法检查,然后生成一个包含所有信息的语法树。对于SELECT语句,这个语法树最终由结构体Select表示:代码struct?Select?{??ExprList?*pEList;??????/*?The?fields?of?the?result?*/??u8?op;?????????????????/*?One?of:?TK_UNION?TK_ALL?TK_INTERSECT?TK_EXCEPT?*/??char?affinity;?????????/*?MakeRecord?with?this?affinity?for?SRT_Set?*/??u16?selFlags;??????????/*?Various?SF_*?values?*/??SrcList?*pSrc;?????????/*?The?FROM?clause?*/??Expr?*pWhere;??????????/*?The?WHERE?clause?*/??ExprList?*pGroupBy;????/*?The?GROUP?BY?clause?*/??Expr?*pHaving;?????????/*?The?HAVING?clause?*/??ExprList?*pOrderBy;????/*?The?ORDER?BY?clause?*/??Select?*pPrior;????????/*?Prior?select?in?a?compound?select?statement?*/??Select?*pNext;?????????/*?Next?select?to?the?left?in?a?compound?*/??Select?*pRightmost;????/*?Right-most?select?in?a?compound?select?statement?*/??Expr?*pLimit;??????????/*?LIMIT?expression.?NULL?means?not?used.?*/??Expr?*pOffset;?????????/*?OFFSET?expression.?NULL?means?not?used.?*/??int?iLimit,?iOffset;???/*?Memory?registers?holding?LIMIT??OFFSET?counters?*/??int?addrOpenEphm[3];???/*?OP_OpenEphem?opcodes?related?to?this?select?*/};?该结构体比较简单,但要注意几个字段。pEList输出结果列的语法树;pSrc为FROM子句语法树;pWhere为WHERE部分的语法树。select语法分析在最终在sqlite3SelectNew中完成:Select?*sqlite3SelectNew(??Parse?*pParse,????????/*?Parsing?context?*/??ExprList?*pEList,?????/*?which?columns?to?include?in?the?result?*/??SrcList?*pSrc,????????/*?the?FROM?clause?--?which?tables?to?scan?*/??Expr?*pWhere,?????????/*?the?WHERE?clause?*/??ExprList?*pGroupBy,???/*?the?GROUP?BY?clause?*/??Expr?*pHaving,????????/*?the?HAVING?c

文档评论(0)

187****5045 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档