浅谈SQLite——查询处理及优化

  http://www.kanwenzhang.com/software/DB-MySQL/c/4335/34335.html

     查询处理及优化关系数据库得以流行根本原因,关系数据库系统最核心技术。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 */
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值