由于在我的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”)相关推荐

  1. mysql limit 5 5 正确_MySql 5.7 同时使用order by和limit时结果集不正确的问题

    MySql 5.7 同时使用order by和limit时结果集不正确的问题 工作中写的一句sql根据日期排序后进行分页,结果缺失了一些数据,且出现了重复的数据. 在sql不断的调整尝试后发现,在同时 ...

  2. mysql group by日期_深入研究mysql中group by与order by取分类最新时间内容

    鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用 ContentProvider时可以使用子查询),主要方法是用SQL ...

  3. Mysql Order By 字符串排序,mysql 字符串order by

    Mysql Order By 字符串排序,mysql 字符串order by ============================== ©Copyright 蕃薯耀 2017年9月30日 http ...

  4. mysql orderby asc_MySQL 数据排序 order by

    1.单一字段排序 select * from tablename order by field1 desc; 排序采用order by+排序字段升序关键字(asc,desc),排序字段可以放多个,多个 ...

  5. mysql查询结果升序_MySQL ORDER BY:对查询结果进行排序

    在MySQL SELECT 语句中,ORDER BY 子句主要用来将结果集中的数据按照一定的顺序进行排序. 其语法格式为: ORDER BY { | | } [ASC|DESC] 语法说明如下. 1) ...

  6. Mysql之group by 和order by 一起用时的排序问题,先排序然后再同组

    业务需求,需要查询表里不同分类下的order最大的记录. 查看表中的记录: SELECT id,tid,`order`, FROM_UNIXTIME(yestime) FROM tfen  WHERE ...

  7. mysql order by 运算_在MySQL中具有ORDER BY的多个LIKE运算符?

    以下是使用ORDER BY实现多个LIKE运算符的语法-select *from yourTableName order by ( yourColumnName like '%yourValue1%' ...

  8. mysql ssh错误_通过SSH隧道连接时,MySQL访问被拒绝错误

    几个月来,我一直通过SSH隧道连接到我们本地测试服务器上运行的 MySQL实例,没有任何问题.突然之间,没有我能想到的任何变化,服务器已经开始拒绝来自Sequel Pro的登录尝试,但错误: Unab ...

  9. mysql count order by_【数据库】mysql中count(), group by, order by使用方法分享

    本文主要和大家分享mysql中count(), group by, order by使用方法,mysql中order by 排序查询.asc升序.desc降序,group by 分组查询.having ...

  10. Mysql之group by 和order by 一起用时的排序问题(亲测)

    业务需求,需要查询表里不同分类下的order最大的记录. 查看表中的记录: SELECT id,tid,`order`, FROM_UNIXTIME(yestime) FROM tfen  WHERE ...

最新文章

  1. SQL Server 2005 镜像构建说明(转载)
  2. avalon2学习教程15指令总结
  3. 《天天数学》连载06:一月六日
  4. 梅创社c语言答案,c语言程序设计第2版) 教学课件 作者 梅创社答案 第四章答案.docx...
  5. 部署 SaltStack 自动化运维工具,并简易批量安装 httpd 服务
  6. 剑指offer之把二叉树打印成多行
  7. CSS修改默认列表元素样式(1.修改默认元素样式 2.伪元素选择器)
  8. RabbitMQ的Android端接收
  9. Histogram Normalization 图像直方图归一化
  10. 线性表(单链表)—图书管理系统 c语言版
  11. 计算机考研安大好考还是郑大好考,这5所“低调到隐形”的211大学,不仅分数低,还好考...
  12. 【建议收藏】10个适合程序员逛的在线社区
  13. 干货|关于云计算认证升级内容
  14. C++(17):any
  15. 如何快速有效的推广微信公众帐号
  16. UVA 10306--e-Coins+dp
  17. Nginx 服务器配置域名证书
  18. NPOI创建Word
  19. 中职网络安全竞赛设备-----文件上传渗透测试
  20. 基于超声图像散斑统计的各向异性扩散滤波器附matlab代码

热门文章

  1. python中range的用法_python的range怎么使用
  2. 负载报服务器无响应,nodejs HTTP服务器无法在高负载下处理大量响应
  3. spss和python stata matlab_(SPSS,Matlab,stata,Python)相关性?
  4. python处理大文件_Python如何处理大文件(知识整理)
  5. 91Android万能驱动最新版,NVIDIA万能驱动电脑版下载|NVIDIA万能驱动官方安装版下载 -爱安卓...
  6. 智伴机器人广西团队_{智伴AI机器人}陈涛广西南宁防城港城市合伙人-人工智能下一个风口精准蓝...
  7. antd mysql_create-react-app使用antd按需加载的样式无效问题的解决
  8. eclipse linux 代码提示,Linux Eclipse代码提示功能设置(Java C/C++)
  9. java 父类构造函数_Java基础系列 - 子类继承父类,调用父类的构造函数
  10. mysql三高讲解(一):1.1 客户端怎样连接mysql数据库