fastreport按条件查询_查询代价的
定义
- 要全面说明如何执行一个查询,要提供关系代数表达式还要对表达式加上注释说明要如何执行每个操作
- 注释可以声明某个具体操作所使用的算法或者将要使用的一个或者多个的特定索引
- 加上了注释的关系代数被称为计算原语
- 执行一个查询的计算原语序列称为查询执行计划或者查询计算计划
- 查询处理的代价可以通过该查询对各种资源的使用情况进行度量, 各种资源包括 磁盘存取,执行查询时cpu使用的事件以及在并行和分布式数据库系统中通信的代价
- 其中磁盘存取是最主要的代价 cpu执行时间的提升比磁盘速度提升要快很多 这种情况下磁盘存取时间决定着整个查询的时间
- 一般情况下 我们仅使用磁盘存取代价来度量查询执行计划的代价
- 我们使用传送磁盘块数和收缩磁盘次数来度量查询计算计划的代价
- 假设一个磁盘子系统传输一个块的数据平均耗时 $ t_T$秒 磁盘块平均访问时间 (磁盘搜索加旋转延迟)为$ t_s$秒 则
一次传输b个块以及执行S次磁盘搜索的操作将消耗$ b t_T + S t_s $秒
选择算法代价估计表(数据库系统概念 308页)
前提: 所有元组都保存在单个文件上的关系运算
知识点: 码属性 作为主码的属性
- A1: 线性搜索:
- 系统扫描每一个文件块,对所有记录都进行比较是否满足选择条件,开始时需要进行一次磁盘搜索访问文件的第一个块(找到起始点),如果文件的块不是按顺序存放的后续就会需要更多的磁盘搜索不过这里忽略这种情况
- A2: 主索引 码值属性等值比较
- 对应具有主索引的码属性进行等值比较 只需要使用主索引找出对应某一条记录即可 (只有一条记录会符合条件)
- A3: 主索引 非码值等值比较
- 当选择条件是记录非码属性A的等值比较时, 我们使用主索引检索到多条记录 与A2不同的是这可能会检索到多条记录
- A4: 辅助索引 等值比较
- 使用的等值条件可以使用辅助索引 若等值条件是码属性则只能检索出一条符合条件的记录 如果不是则可能会检索出多条记录
- 在第一种情况下: 只能检测出一条的记录 和A2相似
- 在第二种情况下: 可能检测出多条记录 每条记录都可能存储在不同的磁盘块上所以除了遍历树需要的IO操作之外还需要每次检索到记录都需要一次IO操作去传输对应的记录 在需要检索大量数据的情况下性能甚至不如线性搜索
上述表格的辅助索引 存储的是指向记录的指针与innodb不同
如果辅助索引存储主键id则需要对代价公式进行一点调整
优化
对于辅助索引做比较操作时 可以对标非码值属性等值比较 以及A6 这种情况下如果检索的数量很多就还不如使用线性搜索好
因此辅佐索引仅应该在选择到的记录很少时使用
复杂的选择实现
- 合取选择
- 析取选择
- 取反 关系代数的结果是 对 $ theta $条件取值为假的元组集合
- A7: 利用一个索引的合取选择
- 首先判断是否存在 某个简单条件里的某个属性上的一条存储路径 (索引结构被称为存储路径 因为提供了定位和存取数据的一条路径)
- 若存在则在算法A2-A6之中选择一个检索满足该简单条件的记录 然后将检索出的记录缓存到内存中 在内存缓存区里再测试检索到的记录有哪些符合其余条件
- 我们选择某个 $ theta_i $以及A1-A6算法之一 他们组合可以使 $ sigma_{theta_i}(R) $的代价达到最低 算法A7的代价就是这个组合的代价
- 因为根据上述组合可以将符合条件的记录拉取到缓冲区 之后的其余条件对比都不存在IO操作了 查询代价只看IO操作所以忽略掉内存里的操作代价
- 简单的说就是看and条件里有没有主索引或者辅助索引可以用来最小代价得获取到数据 如果有就按选择的索引算法来
- A8: 使用组合索引的合取选择: (需要是等值条件 比较值不行)
- 合取选择可能可以使用合适的组合索引 如果选择指定的是多个属性上的等值条件 并且在这些属性字段组合上又存在组合索引 则可以直接搜索索引 索引的类型将决定使用A2 A3 A4 算法中的哪一个 最差也是辅助索引但是存储位置不连续的代价
- A9: 通过游标的交实现合取选择
- 利用游标(记录指针) 该算法要求各个条件所涉及的字段上有带 游标 的索引
- 该算法对每个索引进行扫描 获取那些 指向 满足单个条件的 记录的游标 所有检测到的游标的交集就是那些满足合取条件的指针的集合
- 该算法利用游标集合获取实际记录 如果并非各个条件上都存在索引 则该算法要用没有索引的条件对检测到的记录进行测试
- A9算法的代价是 扫描各个单独索引代价的总和加上获取检索到的游标列表的交集的实际记录的IO操作
- 对游标列表进行排序并按顺序进行检索记录可以减少代价 (这里涉及到一个排序算法的实现)
- 因此应将指向同一个数据块的游标归在一起 这样就可以一次读取到这个数据块里符合条件的记录
- 以及磁盘块的读取也要按存储位置次序来 这样可以减少磁盘臂的操作
- A10: 通过游标的并实现析取选择
- 如果选择条件上均有索引 则诸葛扫描索引获取满足单个条件的元组游标 检索到的所有游标集合就是析取选择的结构 之后进行IO读取即可(也要进行排序)
- 如果某个选择条件上不存在索引 我们就需要对这个关系进行一次线性查找以找出所有满足条件的元组 因此只要有一个条件没有索引最有效的方法就是线性扫描 扫描的同时对每个元组进行 析取条件的测试
- 均有索引时 代价为 所有索引查找的代价总和 以及 一次集合IO取出
- 某个条件没有索引时 代价为 一次线性查找以及一次集合IO取出
fastreport按条件查询_查询代价的相关推荐
- linqto 多个关键字模糊查询_查询函数Choose、Lookup、Hlookup、Vlookup应用技巧解读
Excel中的查找和引用函数主要用于查找工作表中的所需内容,还可以获得工作表中的单元格位置或表格大小等信息,如果将查找和引用函数配合其他的Excel函数使用,将会发挥更强大的功能.常用的查询表中的数据 ...
- jsp模糊查询_查询知识产权和商标专利的网站汇总!
知识产权: 1.大陆知识产权网站http://202.127.48.148/zscq/search/jsp/vBrandSearchIndex.jsp根据查询条件,可以采取模糊查询和精确查询两种方式! ...
- hibernate mysql 多表查询_查询hibernate表程序
Hibernate初识 简介 相信学过SSH2框架的同学们对Hiberate一点也不陌生.Hibernate是Gavin King于2001年开始,作为EJB2风格实体bean的替代品开发的对象关系映 ...
- 中文 查询_查询商标,商标注册通过分析的几个小技巧
前面我们说到了商标注册前,通常情况下一定要进行商标查询,要进行注册通过可行性分析.只有这样才能保证基本的商标注册通过率,不至于无畏的浪费我们的时间和金钱. 1.我们在进行商标查询,输入要查询的商标时, ...
- 苹果保修期查询_查询iPhone的保修日期和激活日期
当我们入手了一台新的iPhone,怕是二手或者是翻新机.你就需要去查询设备的保修日期了,来判断是否有无激活使用过.那么又该如何操作呢? 在手机设置查看 前往手机的[设置]-[通用]-[关于本机] 在[ ...
- mysql分组和where条件查询_【MySQL】:分组查询where和having
分组查询 之前学习聚合函数,知道聚合函数在默认情况下,将会把所有的记录当成一组,让我们在对列求值,计算时更方便了一些. 但是,在某些情况下,我们需要显式地对记录进行分组,使用的是group by [c ...
- 自定义条件查询_数据查询不止有vlookup函数,自定义zlookup函数查询操作更高效...
Excel数据查询,相信大家首先会想到vlookup函数.毋庸置疑vlookup函数在Excel数据查询中作用是非常的强大.但是它也有一些不能实现的数据查询. 如上图所示,我们需要根据人员的出现次数, ...
- asp.net怎么实现按条件查询_【33期】分别谈谈联合索引生效和失效的条件
点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 这道题考 ...
- jdbctemplate无where条件查询_多表查询
1.表的加法 如果想保留重复的内容,则需要在union后面加上 all 2.表的联结 表与表之间因为特定的列产生联结(join) 交叉联结 123行分别与ab行结合形成3*2行数据 内联结 用 as ...
- 使用通用mapper实现条件查询_【微服务】152:Stream流和通用mapper批量查询的使用...
今天是刘小爱自学Java的第152天. 感谢你的观看,谢谢你. 学习计划安排如下: 补充完昨天商品查询中关于分类和品牌的部分,其中牵扯到了两个非常重要的知识点: Stream流的使用,这个学过后基本就 ...
最新文章
- 超级全面的 SpringBoot 注解介绍,每一个用途都应该清晰
- windows 10 常用快捷键
- 观察性研究的网络Meta分析
- 自定义vue-cli生成项目模板配置(1)
- java Map统计字符串中元素的数量
- 实时数仓Hologres首次走进阿里淘特双11
- at moment的用法 the_值得收藏!初中英语10大词类详解+用法+考点, 这一篇全齐了!...
- spss文件 服务器登录,spss连接远程服务器
- 关于url传参中文乱码问题
- Interesting Finds: 2008.01.25
- 用acdess制作html文件,使用ACDSee制作图片注释
- div左对齐与里面的内容偏左但是距离左边有点儿距离
- 放大器的频率特性(2)-- 共源极的频率特性
- 【工作记录】SpringMVC下js提交大数据量到controller失败解决
- matlab 复权数据,用Pandas计算前复权数据
- 环境搭建以及一些命令的记录
- Java8新特性 Stream流常用方法
- 包工协议书样本_个人包工协议样本
- 19英寸标准服务器和网络机柜尺寸表
- 深圳大学,计算机考研情况
热门文章
- [转]_int64、long long 的区别
- 2021-02-13
- 190330每日一句
- Atitit 视图参数解决方案 oracle版和mysql版本 attilax总结.docx
- Atiitt 使用java语言编写sql函数或存储过程
- Atitit 网络爬虫与数据采集器的原理与实践attilax著 v2
- atitit.编程语言 类与对象的 扩展机制.doc
- Atitit. 单点登录sso 的解决方案 总结
- Atitit.javascript 实现类的方式原理大总结
- paip.换工作机后svn服务修复