mysql order by 出现Using filesort的解决办法

http://blog.csdn.net/yangyu112654374/article/details/4251624

比如一条sql语句

select * from TABLE1 where A1=1 and A2=2 and A3=3 order by A4 ASC;

优化后是这样: select A4,A1,A2 ... FROM TABLE1 where A1=1 and A2=2 and A3=3 order by A4 ASC; 并且给 A4,A1,A2,A3加索引,使用order by A4时,联合索引要将A4放在首位。

SELECT的时候必须出现order by的字段才行

2. 从上面可以看到联合索引,也可以叫多列索引,形如 key (‘A1‘,‘A2‘,‘A3‘ ,‘A4‘)等的,排序的思路一般是,先按照A1来排序,A1相同,然后按照A2排序,以此类推,这样对于(A1),(A1,A2),(A1,A2,A3)的索引都是有效的,但是对于(A2,A3)这样的索引就无效了。

时间: 2024-10-25 20:24:08

mysql order by 出现Using filesort的解决办法的相关文章

Lost connection to MySQL server at 'reading authorization packet' 处理解决办法

Mysql Version : 5.1.73 Os Version : Centos 5.9 问题叙述: 今天一个php程序从客户端连接Mysql被监测到在偶尔的连接过程中报错,信息如下: Lost connection to MySQL server at 'reading authorization packet',看到这个错误提示,第一想到是客户端连接不上,服务端本地是否能连接.经验证,服务端本地是可以连接的,这就松了口气,一方面有很多任务是跑在Mysql服务端的,如果本地无法连接,会造成

mysql数据库死锁的产生原因及解决办法

这篇文章主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下 数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性.加锁是实现数据库并 发控制的一个非常重要的技术.在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行. 在数据库中有两种基本的锁类型

mysql保存中文乱码的原因和解决办法

当你遇到这个mysql保存中文乱码问题的时候,期待找到mysql保存中文乱码的原因和解决办法这样一篇能解决问题的文章是多么激动人心. 也许30%的程序员会选择自己百度,结果发现网友已经贴了很多类似mysql 中文乱码.php mysql 中文乱码.mysql5.5中文乱码.mysql 乱码.mysql乱码问题.mysql jsp 乱码.mysql jdbc 乱码.mysql 查询乱码.mysql 导入数据乱码等一系列问题,到底哪个是自己要找的能解决自己问题的呀?15%的程序员一看就懵了,剩下15

mysql中“Table ‘’ is read only”的解决办法

之前是在linux下面直接Copy的data下面整个数据库文件夹,在phpMyAdmin里面重新赋予新用户相应权限后,drupal成功连接上数据库.但出现N多行错误提示,都是跟Cache相关的表是‘Read only‘,而且phpMyAdmin里面优化表也是提示”Table ‘xxx’ is read only“. 我怀疑是文件权限的问题,所以将该数据库文件夹下面所有表文件chmod成777,chown成”_mysql”,但这次问题更严重,drupal里面现实table crached.没办法,

安装mysql时 Write configuration file 错误的解决办法

原因1:mysql的安装路径不能包含字符或者中文. 原因2:select a server type时选择了Server Machine项,write configuration file报错. 解决办法:修改安装路径重新安装.select a server type选择developer Machine项(开发测试类选用)

Linux系统下不让MySQL区分表名的大小写的解决办法

问题描述: 今天将某项目数据库移植到liunix服务器上,结果出现无法找到表的错误,查询数据库,表确实是存在的.经过分析比较,发现是表名大小写问题导致. 问题分析: MySQL数据库的表名在Linux系统下是严格区分大小写的,在Windows系统下开发的程序移植到Linux系统下,如果程序中SQL语句没有严格按照大小写访问数据库表,就可能会出现找不到表的错误. 解决办法: 修改MySQL的配置文件my.cnf,在[mysqld]部分添加如下配置选项lower_case_table_names =

MYSQL---远程连接mysql数据库提示:ERROR 1130的解决办法

出现这种情况是因为mysql服务器出于安全考虑,默认只允许本地登录数据库服务器. 解决办法: 将远程服务器上的mysql数据库中的user表中root用户所对应的Host字段"127.0.0.1"改为"%"即可. mysql> use mysql mysql> update user set Host="%" where Host="127.0.0.1"; mysql> flush privileges; m

MySQL主从同步常见报错的解决办法2

报错截图如下:该报错属于SQL线程报错,原因是relay -index.index 和relay-log里面的文件路径对应不上.解决办法: mysql> stop slave;mysql> reset slave;重新指定主库信息mysql> change master tomaster_host="主库ip地址",master_user="授权用户",master_log_file="binlog",master_log_po

Spring Boot连接MySQL报错“Internal Server Error”的解决办法

报错信息如下: {timestamp: "2018-06-14T03:48:23.436+0000", status: 500, error: "Internal Server Error",-} error : "Internal Server Error" message : "Could not open JDBC Connection for transaction; nested exception is java.sql.S