mysql不能访问order,使用ORDER BY时,MySQL不使用索引(“Using filesort”)
由于在我的SQL代码中使用“ORDER BY” – 说明,我遇到了一些相当重大的性能问题。
只要我没有在SQL中使用ORDER BY-statements,一切都很好。但是,一旦我在SQL代码中引入了ORDER BY:s,由于缺少正确的索引,所有这些都会显着减慢。人们会认为这样做是微不足道的,但从论坛讨论等方面来看,这似乎是一个相当常见的问题,我还没有看到这个问题的确切简明的答案。
问题:给出下表…
CREATE TABLE values_table (
id int(11) NOT NULL auto_increment,
...
value1 int(10) unsigned NOT NULL default '0',
value2 int(11) NOT NULL default '0',
PRIMARY KEY (id),
KEY value1 (value1),
KEY value2 (value2),
) ENGINE=MyISAM AUTO_INCREMENT=2364641 DEFAULT CHARSET=utf8;
…如何创建在查询value1范围时使用的索引,同时对value2的值进行排序?
目前,当不使用ORDER BY子句时,提取可以正常使用。
请参阅以下EXPLAIN QUERY输出:
OK, when NOT using ORDER BY:
EXPLAIN select ... from values_table this_ where this_.value1 between 12345678 and 12349999 limit 10;
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
| 1 | SIMPLE | this_ | range | value1 | value1 | 4 | NULL | 3303 | Using where |
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
However, when using ORDER BY I get "Using filesort":
EXPLAIN select ... from values_table this_ where this_.value1 between 12345678 and 12349999 order by this_.value2 asc limit 10;
+----+-------------+-------+-------+---------------+----------+---------+------+------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+----------+---------+------+------+-----------------------------+
| 1 | SIMPLE | this_ | range | value1 | value1 | 4 | NULL | 3303 | Using where; Using filesort |
+----+-------------+-------+-------+---------------+----------+---------+------+------+-----------------------------+
有关表内容的其他一些信息:
SELECT MIN(value1), MAX(value1) FROM values_table;
+---------------+---------------+
| MIN(value1) | MAX(value2) |
+---------------+---------------+
| 0 | 4294967295 |
+---------------+---------------+
...
SELECT MIN(value2), MAX(value2) FROM values_table;
+---------------+---------------+
| MIN(value2) | MAX(value2) |
+---------------+---------------+
| 1 | 953359 |
+---------------+---------------+
如果需要进一步的信息来回答这个问题,请通知我。
非常感谢!
更新#1:添加新的组合索引(ALTER TABLE values_table ADD INDEX(value1,value2);)不能解决问题。添加这样的索引后,仍然会使用“使用filesort”。
更新#2:我在问题中没有提到的约束是,我宁愿更改表的结构(比如添加索引等),而不是更改使用的SQL查询。 SQL查询是使用Hibernate自动生成的,所以考虑一些或多或少的固定。
mysql不能访问order,使用ORDER BY时,MySQL不使用索引(“Using filesort”)相关推荐
- mysql limit 5 5 正确_MySql 5.7 同时使用order by和limit时结果集不正确的问题
MySql 5.7 同时使用order by和limit时结果集不正确的问题 工作中写的一句sql根据日期排序后进行分页,结果缺失了一些数据,且出现了重复的数据. 在sql不断的调整尝试后发现,在同时 ...
- mysql group by日期_深入研究mysql中group by与order by取分类最新时间内容
鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用 ContentProvider时可以使用子查询),主要方法是用SQL ...
- Mysql Order By 字符串排序,mysql 字符串order by
Mysql Order By 字符串排序,mysql 字符串order by ============================== ©Copyright 蕃薯耀 2017年9月30日 http ...
- mysql orderby asc_MySQL 数据排序 order by
1.单一字段排序 select * from tablename order by field1 desc; 排序采用order by+排序字段升序关键字(asc,desc),排序字段可以放多个,多个 ...
- mysql查询结果升序_MySQL ORDER BY:对查询结果进行排序
在MySQL SELECT 语句中,ORDER BY 子句主要用来将结果集中的数据按照一定的顺序进行排序. 其语法格式为: ORDER BY { | | } [ASC|DESC] 语法说明如下. 1) ...
- Mysql之group by 和order by 一起用时的排序问题,先排序然后再同组
业务需求,需要查询表里不同分类下的order最大的记录. 查看表中的记录: SELECT id,tid,`order`, FROM_UNIXTIME(yestime) FROM tfen WHERE ...
- mysql order by 运算_在MySQL中具有ORDER BY的多个LIKE运算符?
以下是使用ORDER BY实现多个LIKE运算符的语法-select *from yourTableName order by ( yourColumnName like '%yourValue1%' ...
- mysql ssh错误_通过SSH隧道连接时,MySQL访问被拒绝错误
几个月来,我一直通过SSH隧道连接到我们本地测试服务器上运行的 MySQL实例,没有任何问题.突然之间,没有我能想到的任何变化,服务器已经开始拒绝来自Sequel Pro的登录尝试,但错误: Unab ...
- mysql count order by_【数据库】mysql中count(), group by, order by使用方法分享
本文主要和大家分享mysql中count(), group by, order by使用方法,mysql中order by 排序查询.asc升序.desc降序,group by 分组查询.having ...
- Mysql之group by 和order by 一起用时的排序问题(亲测)
业务需求,需要查询表里不同分类下的order最大的记录. 查看表中的记录: SELECT id,tid,`order`, FROM_UNIXTIME(yestime) FROM tfen WHERE ...
最新文章
- SQL Server 2005 镜像构建说明(转载)
- avalon2学习教程15指令总结
- 《天天数学》连载06:一月六日
- 梅创社c语言答案,c语言程序设计第2版) 教学课件 作者 梅创社答案 第四章答案.docx...
- 部署 SaltStack 自动化运维工具,并简易批量安装 httpd 服务
- 剑指offer之把二叉树打印成多行
- CSS修改默认列表元素样式(1.修改默认元素样式 2.伪元素选择器)
- RabbitMQ的Android端接收
- Histogram Normalization 图像直方图归一化
- 线性表(单链表)—图书管理系统 c语言版
- 计算机考研安大好考还是郑大好考,这5所“低调到隐形”的211大学,不仅分数低,还好考...
- 【建议收藏】10个适合程序员逛的在线社区
- 干货|关于云计算认证升级内容
- C++(17):any
- 如何快速有效的推广微信公众帐号
- UVA 10306--e-Coins+dp
- Nginx 服务器配置域名证书
- NPOI创建Word
- 中职网络安全竞赛设备-----文件上传渗透测试
- 基于超声图像散斑统计的各向异性扩散滤波器附matlab代码
热门文章
- python中range的用法_python的range怎么使用
- 负载报服务器无响应,nodejs HTTP服务器无法在高负载下处理大量响应
- spss和python stata matlab_(SPSS,Matlab,stata,Python)相关性?
- python处理大文件_Python如何处理大文件(知识整理)
- 91Android万能驱动最新版,NVIDIA万能驱动电脑版下载|NVIDIA万能驱动官方安装版下载 -爱安卓...
- 智伴机器人广西团队_{智伴AI机器人}陈涛广西南宁防城港城市合伙人-人工智能下一个风口精准蓝...
- antd mysql_create-react-app使用antd按需加载的样式无效问题的解决
- eclipse linux 代码提示,Linux Eclipse代码提示功能设置(Java C/C++)
- java 父类构造函数_Java基础系列 - 子类继承父类,调用父类的构造函数
- mysql三高讲解(一):1.1 客户端怎样连接mysql数据库