gpt4 book ai didi

mysql - 查询值范围mysql时如何建立索引

转载 作者:行者123 更新时间:2023-11-29 03:40:45 24 4
gpt4 key购买 nike

我有一个sql查询

 SELECT level, data, string, soln, uid 
FROM user_data
WHERE level = 10 AND (timetaken >= 151 AND timetaken <= 217) AND uid != 1
LIMIT 8852, 1;

从包含 150 万个条目的表中提取。

我使用了索引

alter table user_data add index a_idx (level, timetaken, uid); 

所以我面临的问题是在某些情况下查询需要超过 30 秒,而在某些情况下不到 0.01 秒。

这里的索引有没有问题。

编辑:添加了解释查询详细信息

+----+-------------+------------------+-------+---------------+------------+---------+------+-------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------+-------+---------------+------------+---------+------+-------+--------------------------+
| 1 | SIMPLE | user_data | range | a_idx | a_idx | 30 | NULL | 24091 | Using where; Using index |
+----+-------------+------------------+-------+---------------+------------+---------+------+-------+--------------------------+

表格中的数据字段是一个文本字段。在大多数情况下,它的长度大于 255 个字符。这会导致问题吗?

最佳答案

首先,您应该尝试使用 EXPLAIN 获取此查询的执行计划:

 EXPLAIN SELECT level, data, string, soln, uid 
FROM user_data
WHERE level = 10 AND (timetaken >= 151 AND timetaken <= 217) AND uid != 1
LIMIT 8852, 1;

这是一个很好的幻灯片,可以跟进这个主题: http://www.slideshare.net/phpcodemonkey/mysql-explain-explained

尝试添加不同的索引:

  • 一个关于 uid 和 level
  • 一个单独的时间花费

关于mysql - 查询值范围mysql时如何建立索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14256509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com