首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MySQL索引占用了<操作符太多的时间?

为什么MySQL索引占用了<操作符太多的时间?
EN

Stack Overflow用户
提问于 2020-09-03 14:51:36
回答 1查看 104关注 0票数 0

这是我的MYSQL表演示,它有超过700万行;

代码语言:javascript
复制
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | varchar(42)  | YES  | MUL | NULL    |       |
| date  | datetime     | YES  | MUL | NULL    |       |
| text  | varchar(100) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

我看到索引是按顺序工作的。

案例1:

代码语言:javascript
复制
 select  * from demo  where id="43984a7e-edcf-11ea-92c7-509a4cb89342" order by date limit 30;

我创建了(id,date)索引,它运行良好,查询执行得太快了。

但请继续看下面的案例。

案例2:

下面是我的SQL查询。

代码语言:javascript
复制
 select  * from demo  where id>"43984a7e-edcf-11ea-92c7-509a4cb89342" order by date  desc limit 30;

为了更快地执行上述查询,我在(id,date)上创建了一个索引。但这需要超过10秒。然后我又在(日期)上做了另一个索引。花了不到1秒的时间。为什么复合索引(id,date)在这种情况下比(日期)索引慢得多??

案例3:

代码语言:javascript
复制
 select  * from demo  where id<"43984a7e-edcf-11ea-92c7-509a4cb89342" order by date  desc limit 30;

对于此查询,甚至(日期)索引也要花费超过1.8秒的时间。为什么<运算符没有使用任何索引(日期)或(id,日期)进行优化。即使是这个查询也只是经过了大约300行,并且花费了1.8秒以上,为什么呢?

代码语言:javascript
复制
mysql> explain select  * from demo  where id<"43984a7e-edcf-11ea-92c7-509a4cb89342" order by date  desc limit 30;
+----+-------------+-------+------------+-------+-----------------------+------------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type  | possible_keys         | key        | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+-------+-----------------------+------------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | demo  | NULL       | index | demoindex1,demoindex2 | demoindex3 | 6       | NULL |  323 |    36.30 | Using where |
+----+-------------+-------+------------+-------+-----------------------+------------+---------+------+------+----------+-------------+

对于如何在案例3中创建索引以优化索引,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-03 14:53:18

在第一个查询中,索引可以用于where子句和排序。所以会很快的。

对于第二个查询,索引只能用于where子句。由于不平等,有关date的信息不再有序。所以引擎需要显式地订购。

此外,我认为第二个查询返回的数据比第一个查询要多得多--如果排序需要10秒的话,会有相当数量的数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63726180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档