我在一些博客和一些与优化相关的文章中读到了如何优化查询.我读到我需要使用索引,并确保使用良好的关系数据库模式正确设置所有主键和外键.

现在我有一个需要优化的查询,我在EXPLAIN上得到:

Using where; Using temporary; Using filesort

我使用的是MySQL 5.5

我知道我使用的是WHERE,但不是我的临时表或文件排序?这是什么意思?

推荐答案

使用临时表意味着MySQL需要使用一些临时表来存储执行查询时计算的中间数据.

使用filesort是一种排序算法,MySQL无法使用索引进行排序,因此无法在内存中完成完整的排序.相反,它将排序分成更小的块,然后合并结果以获得最终的排序数据.

请参考http://dev.mysql.com/doc/refman/5.0/en/explain-output.html.

我认为您可能正在使用ORDER BY加上一些派生表或子查询.如果您可以粘贴查询和相关表/索引信息以及解释输出,那就太好了.

Mysql相关问答推荐

拒绝非超级用户访问停靠的MariaDB(超级用户工作)

SQL不断返回查询失败,并且不知道从这里到哪里go

为什么嵌套循环逻辑不能按预期工作

mysql 代码给我的外键格式不正确

Select 同一张表中的结果数?

MySQL - 如何根据单列查找重复行?

如何在 Shopware 6 DAL 中实施 Haversine 公式?

在 MySQL 中跨日期和位置计算和排序实体的共现

sequelize 中最好的更新方法是什么

使用来自另一个表 mysql 的值将新行插入到表中

如何查找列的所有值都相同的行?

Mysql,显示谁已经和没有 Select 退出巴士服务

需要按总金额检索前 3 个供应商,每个类别 - 子类别

MySQL 使用了错误的索引

MySQL如何在小时和分钟之间 Select 时间

mysql 执行注释部分

基于两个单元格值的 SQL 过滤表

终止空闲的mysql连接

phpmyadmin没有收到要导入的数据错误,如何解决?

从 MySQL JSON 数据类型中提取不带引号的值