几个查询优化的转换-线性代数及其应用中文版

时间:2024-06-22 11:56:06
【文件属性】:

文件名称:几个查询优化的转换-线性代数及其应用中文版

文件大小:2.3MB

文件格式:PDF

更新时间:2024-06-22 11:56:06

sqlite 数据库 嵌入式 入门必备

二、几个查询优化的转换 1. 对于单个表的单个列而言,如果都有形如 T.C=expr 这样的子句,并且都是用 OR操作符连接起 来,形如: x = expr1 OR expr2 = x OR x = expr3 此时由于对于 OR,在 SQLite 中不能利用索引 来优化,所以可以将它转换成带有 IN操作符的子句:x IN(expr1,expr2,expr3)这样就可以用索引进 行优化,效果很明显,但是如果在都没有索引的情况下 OR语句执行效率会稍优于 IN语句的效率。 2. 如果一个子句的操作符是 BETWEEN,在 SQLite中同样不能用索引进行优化,所以也要进行相应 的等价转换: 如:a BETWEEN b AND c 可以转换成:(a BETWEEN b AND c) AND (a>=b) AND (a<=c)。 在上面这个子句中, (a>=b) AND (a<=c)将被设为 dynamic 且是(a BETWEEN b AND c)的子句,那么 如果BETWEEN语句已经编码,那么子句就忽略不计,如果存在可利用的 index使得子句已经满足条件, 那么父句则被忽略。 3. 如果一个单元的操作符是 LIKE,那么将做下面的转换:x LIKE ‘abc%’,转换成:x>=‘abc’ AND x<‘abd’。因为在 SQLite 中的 LIKE是不能用索引进行优化的,所以如果存在索引的话,则转 换后和不转换相差很远,因为对 LIKE不起作用,但如果不存在索引,那么 LIKE 在效率方面也还是比 不上转换后的效率的。 三、 几种查询语句的处理(复合查询) 1.查询语句为: ORDER BY ORDER BY 执行方法: is one of UNION ALL, UNION, EXCEPT, or INTERSECT. 这个语句的执行过 程是先将 selectA和 selectB 执行并且排序,再对两个结果扫描处理,对上面四种操作是不同的,将 执行过程分成七个子过程: outA: 将 selectA的结果的一行放到最终结果集中 outB: 将 selectA的结果的一行放到最终结果集中(只有 UNION操作和 UNION ALL操作,其 它操作都不放入最终结果集中) AltB: 当 selectA 的当前记录小于 selectB 的当前记录


网友评论