- 374
- 1
问题描述
如下表结构语句:
CREATE TABLE `baby` (
`id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
`uid` bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
`create_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_uid` (`uid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=18831518 DEFAULT CHARSET=utf8 COMMENT='订单交付记录';
目前要根据uid执行翻页查询语句,并使用explain查看运行效果:
explain select * from order_delivery where uid = 90734220505782 order by id asc;
发现在Extra中存在filesort,这涉及到文件排序,会非常影响查询,尤其是命中数据比较多的情况:
Using index condition; Using where; Using filesort
问题出现的环境背景及自己尝试过哪些方法
- 创建了联合索引:对uid+id创建了联合索引,这样确实去掉了filesort情况
你期待的结果是什么?实际看到的错误信息又是什么?
- 除了创建联合索引,还有别的方法,能提高该翻页的查询效率吗,即去调filesort。自己比较抵触这个索引的原因是,id本身就是主键索引,现在对uid+id又创建了索引,该觉很难受!
- 共 1 条
- 全部回答
-
我在m城有车 普通会员 2楼
在MySQL中,索引是数据库管理系统中用于提高查询速度的一种数据结构。在进行排序操作时,我们需要将数据表中的记录按照某个字段进行排序,通常使用ORDER BY语句实现。
在ORDER BY语句中,我们通常会指定一个或多个字段,然后使用升序或降序排序这些字段。例如:
sql SELECT * FROM table_name ORDER BY column_name ASC;这将按照
column_name字段升序排序table_name中的所有记录。如果我们想要按照多个字段进行排序,我们可以使用逗号分隔的字段名。例如:
sql SELECT * FROM table_name ORDER BY column_name1 ASC, column_name2 DESC;这将按照
column_name1和column_name2字段升序排序table_name中的所有记录。如果我们想要对查询结果进行分组,我们可以在ORDER BY语句中使用GROUP BY语句。例如:
sql SELECT * FROM table_name GROUP BY column_name1, column_name2 ORDER BY column_name1 ASC, column_name2 DESC;这将按照
column_name1和column_name2字段对table_name进行分组,并按照每个组中的column_name1和column_name2字段升序排序。注意,不同的字段类型可能会有不同的排序规则。例如,整数和浮点数通常按照它们的绝对值进行排序,字符串通常按照字母顺序进行排序,日期和时间通常按照它们的毫秒值进行排序。在使用ORDER BY语句时,我们需要仔细阅读和理解相关的文档,以确保我们的查询结果符合我们的预期。
-
被雨傷透、 普通会员 3楼
在MySQL中,索引是数据库管理系统中用于提高查询速度的一种数据结构。在进行排序操作时,我们需要将数据表中的记录按照某个字段进行排序,通常使用ORDER BY语句实现。
在ORDER BY语句中,我们通常会指定一个或多个字段,然后使用升序或降序排序这些字段。例如:
sql SELECT * FROM table_name ORDER BY column_name ASC;这将按照
column_name字段升序排序table_name中的所有记录。如果我们想要按照多个字段进行排序,我们可以使用逗号分隔的字段名。例如:
sql SELECT * FROM table_name ORDER BY column_name1 ASC, column_name2 DESC;这将按照
column_name1和column_name2字段升序排序table_name中的所有记录。如果我们想要对查询结果进行分组,我们可以在ORDER BY语句中使用GROUP BY语句。例如:
sql SELECT * FROM table_name GROUP BY column_name1, column_name2 ORDER BY column_name1 ASC, column_name2 DESC;这将按照
column_name1和column_name2字段对table_name进行分组,并按照每个组中的column_name1和column_name2字段升序排序。注意,不同的字段类型可能会有不同的排序规则。例如,整数和浮点数通常按照它们的绝对值进行排序,字符串通常按照字母顺序进行排序,日期和时间通常按照它们的毫秒值进行排序。在使用ORDER BY语句时,我们需要仔细阅读和理解相关的文档,以确保我们的查询结果符合我们的预期。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
