文件名称:几个查询优化的转换-线性代数及其应用中文版
文件大小: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.查询语句为: