php - 如何在mysql order by 已经加了索引的时候 排序,避免全表扫描
PHP中文网
PHP中文网 2017-04-11 10:00:20
[PHP讨论组]
首先来一个数据表
CREATE TABLE `student` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `age` int(11) NOT NULL,
  `sex` enum(0,1) NOT NULL DEFAULT 0,
  `date` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `index_name` (`date`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
比如 我想要取得一个数据表的最后十条数据
select * from students order by date desc limit 10;

我在date上加了索引,但是explain 一下这个sql语句还是 type=ALL全表扫描,
现在的问题就是数据量太大大时候,全表扫描很慢,如何利用索引,加快查询速度?谢谢你们
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
天蓬老师

我扫了一遍。应该是用到了索引了。你先用explain看一下输出结果。然后再来判断一下。

PHP中文网

用到索引了的呀.

MariaDB [test]> show create table student1;
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                                                                                                       |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student1 | CREATE TABLE `student1` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `age` int(11) NOT NULL,
  `sex` enum('0','1') NOT NULL DEFAULT '0',
  `date` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `index_name` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [test]> explain select * from student1 order by date desc limit 10;
+------+-------------+----------+-------+---------------+------------+---------+------+------+-------+
| id   | select_type | table    | type  | possible_keys | key        | key_len | ref  | rows | Extra |
+------+-------------+----------+-------+---------------+------------+---------+------+------+-------+
|    1 | SIMPLE      | student1 | index | NULL          | index_name | 4       | NULL |    1 |       |
+------+-------------+----------+-------+---------------+------------+---------+------+------+-------+
1 row in set (0.00 sec)

MariaDB [test]>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号