SQLite的查询优化

SQLite的查询优化

ID:37905503

大小:72.00 KB

页数:9页

时间:2019-06-02

SQLite的查询优化_第1页
SQLite的查询优化_第2页
SQLite的查询优化_第3页
SQLite的查询优化_第4页
SQLite的查询优化_第5页
资源描述:

《SQLite的查询优化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、SQLite的查询优化Postedon2009-03-0312:18 上善 阅读(2060) 评论(9) 编辑 收藏 所属分类: DBMS    SQLite是个典型的嵌入式DBMS,它有很多优点,它是轻量级的,在编译之后很小,其中一个原因就是在查询优化方面比较简单,它只是运用索引机制来进行优化的,经过对SQLite的查询优化的分析以及对源代码的研究,我将SQLite的查询优总结如下:一、影响查询性能的因素:1. 对表中行的检索数目,越小越好2. 排序与否。3. 是否要对一个索引。4. 查询语句的

2、形式二、几个查询优化的转换1. 对于单个表的单个列而言,如果都有形如T.C=expr这样的子句,并且都是用OR操作符连接起来,形如: x=expr1ORexpr2=xORx=expr3 此时由于对于OR,在SQLite中不能利用索引来优化,所以可以将它转换成带有IN操作符的子句:xIN(expr1,expr2,expr3)这样就可以用索引进行优化,效果很明显,但是如果在都没有索引的情况下OR语句执行效率会稍优于IN语句的效率。2. 如果一个子句的操作符是BETWEEN,在SQLite中同样不能用索

3、引进行优化,所以也要进行相应的等价转换: 如:aBETWEENbANDc可以转换成:(aBETWEENbANDc)AND(a>=b)AND(a<=c)。 在上面这个子句中, (a>=b)AND(a<=c)将被设为dynamic且是(aBETWEENbANDc)的子句,那么如果BETWEEN语句已经编码,那么子句就忽略不计,如果存在可利用的index使得子句已经满足条件,那么父句则被忽略。3. 如果一个单元的操作符是LIKE,那么将做下面的转换:xLIKE ‘abc%’,转换成:x>=‘abc’ A

4、NDx<‘abd’。因为在SQLite中的LIKE是不能用索引进行优化的,所以如果存在索引的话,则转换后和不转换相差很远,因为对LIKE不起作用,但如果不存在索引,那么LIKE在效率方面也还是比不上转换后的效率的。三、 几种查询语句的处理(复合查询)1.查询语句为:ORDERBYORDERBY      执行方法: isoneofUNIONALL,UNION,EXCEPT,orINTERSECT. 这个语句的执行过程

5、是先将selectA和selectB执行并且排序,再对两个结果扫描处理,对上面四种操作是不同的,将执行过程分成七个子过程:  outA: 将selectA的结果的一行放到最终结果集中   outB: 将selectA的结果的一行放到最终结果集中(只有UNION操作和UNIONALL操作,其它操作都不放入最终结果集中)    AltB: 当selectA的当前记录小于selectB的当前记录    AeqB: 当selectA的当前记录等于selectB的当前记录    AgtB: 当selectA

6、的当前记录大于selectB的当前记录    EofA: 当selectA的结果遍历完    EofB: 当selectB的结果遍历完         下面就是四种操作的执行过程: 执行顺序UNIONALLUNIONEXCEPTINTERSECTAltB:outA,nextAoutA,nextAoutA,nextAnextAAeqB:outA,nextAnextAnextAoutA,nextAAgtB:outB,nextBoutB,nextBnextBnextBEofA:outB,nextBout

7、B,nextBhalthaltEofB:outA,nextAoutA,nextAoutA,nextAhalt     2. 如果可能的话,可以把一个用到GROUPBY查询的语句转换成DISTINCT语句来查询,因为GROUPBY有时候可能会用到index,而对于DISTINCT都不会用到索引的 。四、子查询扁平化      例子:SELECTaFROM(SELECTx+yASaFROMt1WHEREz<100)WHEREa>5     对这个SQL语句的执行一般默认的方法就是先执行内查询,把结果放

8、到一个临时表中,再对这个表进行外部查询,这就要对数据处理两次,另外这个临时表没有索引,所以对外部查询就不能进行优化了,如果对上面的SQL进行处理后可以得到如下SQL语句:SELECTx+yASaFROMt1WHEREz<100ANDa>5,这个结果显然和上面的一样,但此时只需要对数据进行查询一次就够了,另外如果在表t1上有索引的话就避免了遍历整个表。运用flatten方法优化SQL的条件:1.子查询和外查询没有都用集函数2.子查询没有用集函数或者外查询不是个表的连接3.子查询不是一

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。