- 浏览: 2653732 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
用Explain分析SQL语句的时候,经常发现有的语句在Extra列会出现Using filesort,根据mysql官方文档对他的描述:
中文手册上翻译的很别扭:
总的来说,Using filesort 是Mysql里一种速度比较慢的外部排序,如果能避免是最好的了,很多时候,我们可以通过优化索引来尽量避免出现Using filesort,从而提高速度。
这里举个简单的例子:
`id` int(10) unsigned NOT NULL auto_increment,
`room_number` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `room_number` (`room_number`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE PROCEDURE `askwan`.`askwan` ()
BEGIN
DECLARE v INT DEFAULT 1;
WHILE v<100000;
DO
INSERT INTO testing VALUES(v,v);
SET v=v+1;
END WHILE;
END $$
Query OK, 1 row affected (13.21 sec)
OK,数据准备好了,开始试验。
由上面例子中建立的表信息,我已经建立了两个索引,一个主键id,一个room_number列索引
那现在来看一条SQL,
分析一下
mysql> EXPLAIN SELECT id FROM testing WHERE room_number=1000 ORDER BY id ; +----+-------------+---------+------+---------------+-------------+---------+-------+------+-----------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+---------------+-------------+---------+-------+------+-----------------------------+ | 1 | SIMPLE | testing | ref | room_number | room_number | 4 | const | 1 | Using where; Using filesort | +----+-------------+---------+------+---------------+-------------+---------+-------+------+-----------------------------+ 1 row in set (0.00 sec)
出现了Using
filesort,并且用到了room_number这列索引,但是,在这里用到的索引是针对WHERE后面的room_number条件的,而最后面的
排序是根据id来的,这就是手册中说的,“额外的一次排序”!,于是就会出现Using
filesort,根据我以前写过的一文章,我再建立一个联合索引 room_number_id
在来分析一下
mysql> EXPLAIN SELECT id FROM testing WHERE room_number=1000 ORDER BY id ; +----+-------------+---------+------+----------------------------+----------------+---------+-------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+----------------------------+----------------+---------+-------+------+--------------------------+ | 1 | SIMPLE | testing | ref | room_number,room_number_id | room_number_id | 4 | const | 1 | Using where; | +----+-------------+---------+------+----------------------------+----------------+---------+-------+------+--------------------------+ 1 row in set (0.00 sec)
现在Using filesort不见了。
总结一下:
1.一般有order
by语句,在索引加得不当的情况下,都有可能出现Using filesort,这时候就要对SQL语句和索引进行优化了,但是,并不是说出现Using
filesort就是个严重的问题,不是这样的,此次举的例子比较极端,几乎不太可能出现这么傻瓜的查询,优化和不优化,要看它是不是影响了业务性能。
2. 从上面可以看到联合索引,也可以叫多列索引,形如 key ('A1','A2','A3'
,'A4')等的,排序的思路一般是,先按照A1来排序,A1相同,然后按照A2排序,以此类推,这样对于(A1),(A1,A2),
(A1,A2,A3)的索引都是有效的,但是对于(A2,A3)这样的索引就无效了
发表评论
-
MySQL 中的重做日志,回滚日志 ,以及二进制日志的简单总结
2018-06-06 17:44 1156ImportNew 5天前 (点击上方公众号,可快速关注) ... -
mysql 设置字符集 中文乱码
2016-02-04 15:45 2905一、登录MySQL查看用SHOW VARIABLES LIK ... -
mysql slow log控制
2014-08-28 10:15 5325参考官方文档:http://dev.mysql.com/do ... -
MySQL数据库InnoDB存储引擎 Buffer Pool Flush List详解
2014-08-21 10:36 1236原文:http://www.zhdba.com/mysqlo ... -
Percona-Server安装记录
2014-07-28 23:05 1410本文档记录安装Percona-Server开发环境,非生产 ... -
mysql创建用户权限
2014-07-11 17:01 767mysql 权限如下: root@localhost : ... -
mysql group测试脚本
2014-06-25 15:38 847sql数据语句: CREATE TABLE `access ... -
mysql性能优化之 show profile
2014-06-20 10:46 2431很漂亮的结果,没有creating sort index ... -
MYSQL INNODB中GAP LOCK引起死锁的问题
2014-06-06 13:08 2305先了解一下什么是GAP LOCK 在INNODB中,rec ... -
MySQL出现Waiting for table metadata lock的场景浅析
2014-04-23 14:27 695原文:http://ctripmysqldba.iteye ... -
mysql 索引原理
2014-03-27 20:02 494对于这条SQL: from message where ... -
mysql中group的实现
2014-01-24 10:31 742同学问到group by的实现 ... -
MySQL Innodb日志机制深入分析
2013-12-02 22:28 01.1. Log & Checkpoint In ... -
优化临时表使用,SQL语句性能提升100倍
2013-12-02 22:25 941【问题现象】 线上mysql数据库爆出一个慢查询,DBA观 ... -
也说快速关闭MySQL/InnoDB
2013-09-21 13:56 791原文:http://www.orczhou.com/ind ... -
关于mysql优化一些总结
2013-09-21 08:41 1068最近在做mysql数据库的 ... -
robbin谈MySQL InnoDB性能调整的一点实践
2013-09-21 08:13 753因为JavaEye网站的数据 ... -
mysql文档集合
2013-09-05 12:11 844理解MySQL——索引与优化 理解MySQL——架构与概念 ... -
mysql binlog细节
2013-09-05 12:06 1021原来mysql binlog内容是先保存在trx_cache中 ... -
MySQL如何避免使用swap
2013-09-04 09:52 1063原文: http://www.taobaodba.com/ ...
相关推荐
- **覆盖索引**:如果`SELECT`的列完全由索引提供,MySQL可以直接从索引中获取数据,无需回表,从而避免`Using filesort`。 - **调整索引**:根据查询需求创建合适的复合索引,确保`ORDER BY`的列在索引的前面。 ...
这样,当执行`ORDER BY INVERSE_DATE`时,MySQL就可以直接使用索引进行排序,从而避免`Using filesort`。 优化SQL查询时,我们需要关注以下几点: 1. **避免全表扫描**:尽量让MySQL能使用索引来定位数据,而不是...
MySQL索引优化是数据库性能提升的关键之一。在深入理解索引优化的过程中,我们需要关注几个核心概念,如索引类型、键长度(key_len)、参考值(ref)以及全表扫描(type=ALL)和文件排序(Using filesort)。 首先...
【MySQL索引优化详解】 MySQL索引优化是提升数据库性能的关键环节,通过合理设计和使用索引,可以显著加快查询速度,减少数据访问的时间。在MySQL中,索引是一种特殊的数据结构,允许数据库快速找到存储在表中的...
注意`Extra`列中的`Using filesort`和`Using temporary table`,这些表明了MySQL需要额外的资源进行排序或创建临时表,可能是优化的焦点。 3. **索引优化** - 选择合适的列建立索引:考虑选择具有高选择性的列,即...
5. using filesort:当无法利用索引排序时,解释(explain)查询计划会显示“using filesort”,表示进行了手工排序。 关于group by分组优化,其优化原理与order by相似。group by语句通常用于分组统计,例如按照...
通过对`EXPLAIN`输出的分析,我们可以识别出可能导致低效的查询,如全表扫描(`type`为ALL)、未使用索引(`key`为NULL)或不必要的排序(`Extra`中有Using filesort),并据此优化查询语句或调整索引策略。 总的来说,...
MySQL 优化是一个涵盖广泛的主题,涉及数据库架构设计、SQL 查询优化、索引策略以及系统配置等多个方面。在本文中,我们将重点关注两个关键的工具:MySQL 的慢查询日志(Slow Query Log)及其分析工具 `...
`Extra`列中的信息非常重要,例如`Using where`表示WHERE条件用于索引,而`Using filesort`则表示数据必须进行额外的排序操作,这通常会导致性能下降。 通过分析`EXPLAIN`的结果,你可以发现是否正确利用了索引,...
- `Extra`:包含额外的信息,如`Using filesort`表示需要使用临时文件进行排序,这通常表明查询性能不佳。 3. **复合索引与单个索引的区别**: - 复合索引是由多个字段组成的索引,例如`ALTER TABLE user ADD ...
- `Extra`:提供有关查询执行的附加信息,如`Using where`、`Using index`等,`Using filesort`表示MySQL需要进行额外的排序步骤,这通常是需要优化的地方。 在优化查询时,关注`type`列尤为关键。如果查询类型是`...
MySQL 查询优化的百科全书 —— Explain 详解 MySQL 是怎样运行的?从根儿上理解 MySQL 的查询优化是一件复杂的事情,但了解 Explain 语句输出的各个列的意思是非常重要的。本章将继续唠叨 Explain 语句输出的各个...
然而,未对表添加任何额外索引时,查询性能低下,因为MySQL进行了全表扫描(type=ALL)并进行了外部排序(Using filesort)。 为解决这个问题,我们尝试创建了一个复合索引`idx_ccv`,包含`category_id`、`comments...
- 使用EXPLAIN查看查询计划,注意Extra字段中的Using Filesort和Using Temporary,尽量避免这些情况,它们可能导致额外的磁盘操作和性能下降。 - 联合索引的创建需考虑字段的查询频率和范围,只有包含等于操作的...
总之,理解`ORDER BY`和`GROUP BY`的索引优化策略,以及如何通过`EXPLAIN`分析查询计划,可以帮助我们有效地优化查询,避免不必要的`filesort`操作,从而提升MySQL数据库的性能。在设计索引时,应考虑查询语句的常见...
本文通过实例分析了MySQL索引对排序速度的影响,强调了合理设计索引对于优化数据库性能的重要性。 首先,索引的基本作用是加速数据查找。在数据库中,索引就像书的目录,使得数据的检索过程不再需要逐行扫描整个表...
- 使用`EXPLAIN`命令分析查询计划,查看是否有效使用了索引,以及是否出现`using filesort`,这通常意味着MySQL需要额外的步骤进行排序。 - 避免在`SELECT`列表中无意义地创建索引,例如在上述例子中,对`id`、`...