这个是在一年前做性能优化测试时发现的,当时测试的版本是mysql-5.5.30-tokudb-7.0.1、mysql-5.5.41-tokudb-7.5.5 、percona 5.6.24-72.2这三个版本。
后来看到官方说是一个bug.
具体的bug看
https://github.com/mysql/mysql-server/commit/da1d92fd46071cd86de61058b6ea39fd9affcd87
具体看下面的测试:
1、测试方法:
物理读测试(磁盘读)
:测试前重启MYSQL并且清空OS缓存,并执行sql保证mysql已经打开测试表相关文件(当一个表下文件比较多的时候,打开文件也是比较耗时的)。
[root@slave159 ~]# sync;echo 1>/proc/sys/vm/drop_caches;/etc/init.d/mysql3307 restart; mysql -uroot -h 192.168.60.159 -P3307 changzhou_5000
mysql> select * from sjkk_gcjl limit 0;
内存读测试:紧接着第二次执行查询,并nmon监控没有物理读。
2、测试一
2.1、测试目的
测试mysql-5.5.30-tokudb-7.0.1版本tokudb引擎表是否存在DESC比ASC查询慢的问题。
2.2、测试环境
VERSION: mysql-5.5.30-tokudb-7.0.1
DB:changzhou_2yi
数据量:2亿左右
ASC查询语句在提取数据部分用到的函数:
QUICK_RANGE_SELECT::get_next()------>handler::read_multi_range_next(st_key_multi_range**)------> ha_tokudb::read_range_next() ------> handler::read_range_next() -----> ha_tokudb::index_next(unsignedchar*) ----->ha_tokudb::get_next(unsigned char*, int, __toku_dbt*)
从这里可以看出ASC在提取数据时比DESC多了三个函数,分别是handler::read_multi_range_next()、ha_tokudb::read_range_next()、handler::read_range_next()。
其中read_multi_range_next函数(连续多块读),这个应该是ASC比DESC快的根本原因。
问题定位结论
mysql-5.5.30-tokudb-7.0.1版本DESC比ASC快的原因是MYSQL层调用TOKUDB引擎时使用了不同类型的函数。在ASC查询时使用到了read_multi_range_next函数(连续多块读),是造成ASC比DESC快的原因。
这个是在一年前做性能优化测试时发现的,当时测试的版本是mysql-5.5.30-tokudb-7.0.1、mysql-5.5.41-tokudb-7.5.5 、percona 5.6.24-72.2这三个版本。后来看到官方说是一个bug.具体的bug看https://github.com/mysql/mysql-server/commit/da1d92fd46071cd86de61058b
select answer, scores from assess_score order by scores desc /*在分数表里查询答案和分数两列,并根据分数从大到小排列(降序)*/
select answer, scores from assess_score order by scores /*在分数表里查询答案和分数两列,默认分数从小到大排列(升序)*/
1、单一字段排序order by 字段名称
作用: 通过哪个或哪些字段进行排序
含义: 排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序(asc),如果存在 where 子句,那么 order by 必须放到where 语句后面。
(1)、按照薪水由小到大排序(系统默认由小到...
asc是指定列按升序排列(即:从小到大排序)---降序排列
desc则是指定列按降序排列(即:从大到小排序)---升序排列
排序子句语法:order by 列名 asc/desc
<!--订单列表,降序需要排序一下-->
<select id="listOrderByUserId" resultType="VideoOrde...
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY
Company DESC, OrderNumber ASC
参考:http://...
- MySQL 官方网站:https://dev.mysql.com/downloads/
- Percona 官方网站:https://www.percona.com/software/mysql-database/percona-server
请注意,TokuDB 是一种插件,需要在安装并运行 MySQL 后再安装。您还需要确保您的系统满足安装要求。
如果您需要帮助安装或使用 MySQL TokuDB,请告诉我您遇到的具体问题,我会尽力帮助您。