文件名称:连接查询-线性代数及其应用中文版
文件大小:2.3MB
文件格式:PDF
更新时间:2024-06-22 11:56:06
sqlite 数据库 嵌入式 入门必备
五、连接查询 在返回查询结果之前,相关表的每行必须都已经连接起来,在 SQLite 中,这是用嵌套 循环实现的,在早期版本中,最左边的是最外层循环,最右边的是最内层循环,连接两个或者更多的 表时,如果有索引则放到内层循环中,也就是放到 FROM 最后面,因为对于前面选中的每行,找后面 与之对应的行时,如果有索引则会很快,如果没有则要遍历整个表,这样效率就很低,但在新版本中, 这个优化已经实现。 优化的方法如下: 对要查询的每个表,统计这个表上的索引信息,首先将代价赋值为 SQLITE_BIG_DBL(一 个系统已经定义的常量): 1) 如果没有索引,则找有没有在这个表上对 rowid 的查询条件: 1.如果有 Rowid=EXPR,如果有的话则返回对这个表代价估计,代价计为零,查询得到的记录数为 1,并完成对这个表的代价估计, 2.如果没有 Rowid=EXPR 但有 rowid IN (...),而 IN是一个列表,那么记录返回记录数为 IN列 表中元素的个数,估计代价为 NlogN, 3.如果 IN不是一个列表而是一个子查询结果,那么由于具体这个子查询不能确定,所以只能估计 一个值,返回记录数为 100,代价为 200。 4.如果对 rowid是范围的查询,那么就估计所有符合条件的记录是总记录的三分之一,总记录估 计为 1000000,并且估计代价也为记录数。