Mysql物理查询技术
来源:互联网 发布:火狐javascript void 0 编辑:程序博客网 时间:2024/06/04 01:00
逻辑查询优化主要基于代数理论与启发式规则。
(1):是全盘扫描最优,还是基于索引的扫描最优;对于单表扫描,主要还是看磁盘IO;
(2):不同表的连接方式,有不同的消耗;块嵌套循环连接算法,基于Hash的连接,排序归并连接;
(3):考虑哪一种连接的花费是最少的;
图:物理查询优化技术
如果选择率低于10%,那么使用索引扫描效率很高,如果选择率比10%大很多,那么使用索引扫描的效率可能不高。
(3):我们要查询的数据信息在索引树上可以找到,那么直接利用索引就可以了,不需要读取数据文件;
块嵌套循环连接算法减少了r2的读入次数。
Hash连接只适用于等值计算,不适用于不等式的比较,不能利用Hash连接进行分组或者排序的优化,因为Hash索引是无需的。
Memory代价:内存拷贝代价;
Remote代价:远程代价;
type:ALL表示全表扫描;
UsingIndex:表示使用了只读索引,表示只使用索引,而不使用数据文件来读取数据;
Using join buffer:使用了连接缓存;
BlockNestedLoop:块嵌套循环连接算法;
两表的普通列做等值连接;
tt1表的主键列和tt2表的普通列做等值连接;
BKA即Batch Key Access:批量关键字访问或者依照索引对批量关键字访问;
SET optimizer_switch="mrr=on, mrr_cost_based=off, batched_key_access=on";
mrr=on:多范围扫描;
mrr_cost_based=off:把基于mrr的估算关掉;
batched_key_access=on; 打开bka算法;
有序的表:Mysql在执行多表连接之前,先对表进行排序操作,即数据量小的表在前面,数据量多的表在后面;
当连接的表的个数小于optimizer_search_depth时,Mysql使用的是穷举算法,把所有的连接顺序遍历一遍,从中找出最优的执行计划
如果optimizer_search_depth的值比较小,那么Mysql可能会丢掉一些可能的搜索值,可能的搜索顺序;
剪枝:减去一些连接的可能;
通过关键字STRAIGHT_JOIN来强制Mysql来使用这种连接方式,即按照from关键字后面的表出现的顺序来连接表;
- Mysql物理查询技术
- MySQL物理查询优化技术---index dive辨析
- 查询MySql数据库物理文件存放位置
- Oracle RMAN物理备份技术之查询和报告
- MySQL数据库的查询技术
- Mysql子查询优化技术
- mysql里分表技术与查询
- MySQL中的查询优化技术
- MySQL查询处理——逻辑查询处理和物理查询处理
- MySQL查询优化技术之使用索引
- 【小镇的技术天梯】MySQL 查询缓存
- MySQL查询优化技术之:使用索引
- 再谈MySQL的子查询优化技术
- MySQL查询优化技术的一点儿问答
- MySQL优化技术:定位慢查询
- 2.物理查询处理
- 物理加速技术
- mybatis 物理分页技术
- MySql 创建表的时候保留大小写状态
- 【codeforces #295(div 1)】ABC题解
- Android volley 解析(四)之缓存篇
- Android Studio导入GitHub上的项目常见问题(以图片轮播开源项目为实例)
- OpenGL Framebuffer Object (FBO)
- Mysql物理查询技术
- 双队列实现队列中元素排序
- cout流的重载
- AFNetworking NSURLErrorDomain error -1012
- Windows Phone 8.1添加后台任务运行条件(可添加多个)
- Qt元对象系统
- strcpy函数的实现
- 精通正则表达式(1)
- IOS:最简单一个使用自定义的TableViewCell例子