Mysql中排序在SQL优化中的部分解析
来源:互联网 发布:合同档案管理系统软件 编辑:程序博客网 时间:2024/06/05 13:24
在mysql中,相关的复制的sql语句,会对所要搜取得结果进行规整,这里就有排序,分组,统计等相关整理过程,其中排序的算法的意义最为重要,在mysql不同的版本中,特别是在5.1系列以后对排序算法的定义不断加强改善;
在排序算法中对新旧算法当中提到的阵列的宽度,以及函数搜取的范围,大小,影响的高度等都进行了修改,并设置相关的阀值,以指导相关的参数自动闭合;以下是在5.5系列中相关的sort文件截取;
#define UT_SORT_FUNCTION_BODY(SORT_FUN, ARR, AUX_ARR, LOW, HIGH, CMP_FUN)\{\ulintut_sort_mid77;\ulintut_sort_i77;\ulintut_sort_low77;\ulintut_sort_high77;\\ut_ad((LOW) < (HIGH));\ut_ad(ARR);\ut_ad(AUX_ARR);\\if ((LOW) == (HIGH) - 1) {\return;\} else if ((LOW) == (HIGH) - 2) {\if (CMP_FUN((ARR)[LOW], (ARR)[(HIGH) - 1]) > 0) {\(AUX_ARR)[LOW] = (ARR)[LOW];\(ARR)[LOW] = (ARR)[(HIGH) - 1];\(ARR)[(HIGH) - 1] = (AUX_ARR)[LOW];\}\return;\}\\ut_sort_mid77 = ((LOW) + (HIGH)) / 2;\\SORT_FUN((ARR), (AUX_ARR), (LOW), ut_sort_mid77);\SORT_FUN((ARR), (AUX_ARR), ut_sort_mid77, (HIGH));\\ut_sort_low77 = (LOW);\ut_sort_high77 = ut_sort_mid77;\\for (ut_sort_i77 = (LOW); ut_sort_i77 < (HIGH); ut_sort_i77++) {\\if (ut_sort_low77 >= ut_sort_mid77) {\(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_high77];\ut_sort_high77++;\} else if (ut_sort_high77 >= (HIGH)) {\(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_low77];\ut_sort_low77++;\} else if (CMP_FUN((ARR)[ut_sort_low77],\ (ARR)[ut_sort_high77]) > 0) {\(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_high77];\ut_sort_high77++;\} else {\(AUX_ARR)[ut_sort_i77] = (ARR)[ut_sort_low77];\ut_sort_low77++;\}\}\\memcpy((void*) ((ARR) + (LOW)), (AUX_ARR) + (LOW),\ ((HIGH) - (LOW)) * sizeof *(ARR));\}\参数max_length_for_sort_data;
在MySQL中,决定使用第一种老式的排序算法还是新的改进算法的依据是通过参数max_length_for_sort_data来决定的。当我们所有返回字段的最大长度小于这个参数值的时候,MySQL就会选择改进后的排序算法,反之,则选择老式的算法。所以,如果我们有充足的内存让MySQL存放需要返回的非排序字段的时候,可以加大这个参数的值来让MySQL选择使用改进版的排序算法。
参数sort_buffer_size;
增大sort_buffer_size并不是为了让MySQL可以选择改进版的排序算法,而是为了让MySQL可以尽量减少在排序过程中对需要排序的数据进行分段,因为这样会造成MySQL不得不使用临时表来进行交换排序。
还有就是对相关的字段进行规避;选择返回需要的即可;
- Mysql中排序在SQL优化中的部分解析
- mysql中的sql查询优化
- MySQL中SQL优化案例
- Mysql在性能测试中的部分计数器
- sql在MySQL中的使用
- MySql在索引优化(排序,复合)
- mysql中的SQL优化与执行计划
- mysql中的SQL优化与执行计划
- Oracle部分sql优化
- sql优化部分总结
- mysql优化(第一部分)
- MySQL中SQL优化和架构设计
- MySQL中SQL优化和架构设计
- MySQL中SQL优化和架构设计
- mysql中sql优化小心得
- Python 中的线性优化,第 2 部分: 在云中构建一个可扩展的基础架构
- MySQL中的sql语法及部分内在实现
- mysql优化---优化sql
- Python 网页编程- Pyramid 安装测试
- c++之SQLite的增删改查
- 《LINUX C编程实战》自学笔记——套接字编程(一)
- Javascript如何获取URL地址栏参数
- word07在失去焦点之后不能使用鼠标点击的解决方法
- Mysql中排序在SQL优化中的部分解析
- Android系统Surface机制的SurfaceFlinger服务的启动过程分析
- 分布式ID的简单实现
- 报错集锦
- SQLite3 C/C++ 开发接口简介(API函数)
- JAVA 对象克隆clone
- EJB3.0 查询语言JPQL用法
- VS字符串时间转换用法
- Linux系统中进程与作业的管理