问题标签 [filesort]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - MySQL:使用 IN 和 ORDER BY 时避免文件排序
假设我有下表(我们称之为my_table
):
的主键my_table
是table_id
(auto_increment),我也有一个带有my_field
and的键table_id
。
如果我测试这个查询......
...我得到:
您可以看到它使用了正确的密钥 ( my_field
)。
但如果我试试这个...
...我得到:
您可以看到它根本没有使用任何键,更糟糕的是,使用了filesort。
即使我做“ FORCE INDEX (my_field)
”,它仍然会进行文件排序。
有什么办法可以避免文件排序?
mysql - MySQL中使用filesort按日期时间列排序
我有一张带有日期时间(DATE)和位(PUBLIC)的汽车表。
现在我想获取按 DATE 和 PUBLIC = 1 排序的行,所以我使用:
但不幸的是,当我使用解释来查看发生了什么时,我有这个:
当我只有 100 行时,获取这些数据需要 0.3 毫秒。有没有其他方法可以禁用文件排序?
如果我去索引我有索引 (PUBLIC, DATE) 不是唯一的。
表定义:
mysql - MySQL 在执行“order by”时停留在“使用文件排序”上
我似乎无法让我的查询停止使用文件排序。
这是我的查询:
表结构:
解释:
编辑:我从查询/表结构中删除了一些不必要的部分。
有人有什么想法吗?
mysql - 优化 MySql 查询以避免使用“使用文件排序”
我需要您的帮助来优化查询以避免使用“使用文件排序”。查询的工作是选择属于特定标签的所有文章。查询是:
表结构如下:
标记表
文章表
样本数据
mysql - Mysql 慢查询:INNER JOIN + ORDER BY 导致文件排序
我正在尝试优化此查询:
表的大小是 38k 行,31k 和 mysql 使用“文件排序”,所以它变得很慢。我尝试使用不同的索引,没有运气。
我需要定义什么样的索引来避免mysql使用filesort?当 order 字段不在 where 子句中时是否可能?
更新:分析结果:
更新2:
真实查询(更多布尔字段,更多无用索引)
空集(1.25 秒)
没有 ORDER BY — 0.01 秒。
解决方案
- 查询更新为“ORDER BY posts_tags.created_at DESC”(应用代码中的两个小改动)
- 添加的索引:index_posts_tags_on_created_at。
就这样!
sql - SQL Query 总是按子句顺序使用文件排序
我正在尝试优化使用 order by 子句的 sql 查询。当我使用 EXPLAIN 时,查询总是显示“使用文件排序”。我将此查询应用于一个小组讨论论坛,其中用户的帖子附加了标签。
这是我正在使用的 3 个表:users、user_tag、tags
user_tag 是用户及其标签的关联映射表。
我使用编程更新了服务器端的usage_count。这是给我带来问题的查询。查询是找出特定用户名的tag_id和usage_count,按使用次数降序排列
这是解释输出:
我应该改变什么才能失去“使用文件排序”
ruby - 在 Ruby 中,如何在目录列表中的文件夹之前列出/排序文件?
我必须在 ruby 中遵循代码:
它输出(例如):
我希望它像这样输出:
基本上,我希望在目录之前显示文件。有我可以使用的排序命令吗?
mysql - 如何提高这个 MySQL 查询的性能?
我有一个 MySQL 查询:
客户表有大约 60-70k 行,并有一个索引“id”、“record_type”、“date_action”和“company_name”——不幸的是,查询仍然需要 5 多秒才能完成。由于不需要文件排序,因此删除“ORDER BY”会将其减少到大约 30 毫秒。有什么办法可以更改此查询以改善 5 秒以上的响应时间?
mysql - 使用“OR”语句时Mysql索引出现问题
有什么方法可以为这个查询创建一个有效的索引并摆脱“文件排序”?
我创建了索引“topcat”(列:topcat1+topcat2+topcat3+approved+id)但仍然是“使用位置;使用文件排序”。
我可以再创建一列,比如说“all_topcats”来将 topcat 数字存储在一个数组中 - 1、5、7,然后运行查询“... where $cid iIN ()...”。但问题是,在这种情况下,“all_topcats”列将是“varchar”,但“approved”和“id”列-int,无论如何都不会使用索引。
有任何想法吗?谢谢。
mysql - 按原因排序
我仍然有以下问题
Id & timestamp是一个主键对 (mediumint+datetime) dataTypeId是一个外键 (mediumint) 表被创建为InnoDb
可以有更多具有相同 id 和不同时间戳的记录(同一项目的版本)。这就是group by 的原因。
例如,我读过这个:stackoverflow 上的类似主题
但它没有解决我的问题。
我尝试创建以下索引:
- (dataTypeId, id, timestamp) 上的索引 - 按此顺序
- (dataTypeId, timestamp) 上的索引 - 按此顺序
- 身份证上的索引
- 时间戳索引
最后两个有点绝望
我想我必须错过一些基本的东西——
但真的不知道是什么。
不要指望解决方案(这会很好:) 以正确的方式踢我 :)
sort_buffer_size 现在是 4194288
编辑: 解释 - 没有索引
用创建的索引解释