您当前的位置: 首页 > 数据库教程 > MySQL教程 > mysql数据库如何使用索引扫描进行排序?

mysql数据库如何使用索引扫描进行排序?

作者:不详 来源:网络 发布时间: 2011-10-07 17:04 点击:
MySQL数据库有两种方法可以生成有序的结果:使用文件排序或者按顺序的扫描索引。你可以使用EXPLAIN来查看type列是否是index来得知MySQL是否计划的扫描索引。 扫描索引本身是非常快速的,因为它只是简单的需要从一个索引实体移动到下一个。然而,如果MySQL没有使用索引

mysql数据库如何使用索引扫描进行排序?

  MySQL数据库有两种方法可以生成有序的结果:使用文件排序或者按顺序的扫描索引。你可以使用EXPLAIN来查看type列是否是index来得知MySQL是否计划的扫描索引。
  
  扫描索引本身是非常快速的,因为它只是简单的需要从一个索引实体移动到下一个。然而,如果MySQL没有使用索引覆盖这个查询,它就会查找在索引中发现的每一行。这是个随机IO的过程,因此从索引顺序中读取数据比连续表的扫描要慢很多。
  
  MySQL可以使用相同的索引来排序和查找行。如果可能,同时满足这两个任务是再好不过的事情了。
  
  当索引的顺序和order by条件顺序相同并且所有的列都在同一个方向(升序或降序)时,通过索引排序才能好用。如果查询关联了多张表,所有order by条件后的列必须是第一张表的情况下,才能使用索引排序。ORDER BY条件也和查询有相同的限制:它需要形成一个左端前缀的索引。在其他的情况下MySQL使用文件排序。
  
  有一种情况就是,ORDER BY后的条件并不是最左端的索引前缀,如果WHERE条件或者一个JOIN条件也赋予了这些缺失索引的值,那么依然可以使用索引来排序。
  
  比如,rental表有一个索引(rental_date,inventory_id,customer_id)。、
  
  CREATE TABLE rental(
  
  ...
  
  PRIMARY KEY(rental_id),
  
  UNIQUE KEY rental_date(rental_date,inventory_id,customer_id),
  
  KEY idx_fk_inventory_id(inventory_id),
  
  KEY idx_fk_customer_id(customer_id),
  
  KEY idx_fk_staff_id(staff_id),
  
  ...
  
  );
  
  MySQL会使用rental_date索引去排序下列查询
  
  mysql>EXPLAIN SELECT rental_id,staff_id FROM sakila.rental
  
  ->WHERE rental_date='2005-05-25'
  
  ->ORDER BY inventory_id,customer_idG
  
  ***************************1.row***************************
  
  type:ref
  
  possible_keys:rental_date
  
  key:rental_date
  
  rows:1
  
  Extra:Using where
  
  这是可以使用索引排序的,即使ORDER BY条件并不是最左边的索引前缀。那是因为我们已经在where条件后指定了第一列索引的值。

分享到:
本文"mysql数据库如何使用索引扫描进行排序?"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(2)
100%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4