mysql - MySQL 优化器没有足够快地使用 ORDER BY
问题描述
我正在处理几个处理客户订单的表格。一张表包含订单的详细信息,另一张表包含运输信息。
我正在尝试选择从给定仓库运出的最新订单。这很简单:
SELECT oi.* FROM order_info oi
INNER JOIN order_shipping_info osi ON osi.order_info_id = oi.id
WHERE osi.warehouse_id = 5
ORDER BY oi.order_date DESC LIMIT 100;
但是,我遇到的问题是表中的行数比仓库数大很多。MySQL 确定没有必要在warehouse_id 列上使用索引,而是进行文件排序,它可以抓取150 万+ 行。
我会假设优化器将从对order_info
表进行排序开始(因为 order_date 列已编入索引),然后从那里开始工作。这样,在最好的情况下,它会抓取它找到的前 100 行。
如果我删除 WHERE 子句,查询大约需要 50 毫秒才能运行。使用 WHERE 子句,它更接近 3 秒。
有没有办法可以强制 MySQL 首先执行 ORDER BY 而不是加入?
使用 MySQL 5.6
解决方案
推荐阅读
- xcode - 无效的 Swift 支持 - 文件与 Xcode 10.1 不匹配
- vmware - 使用 Java SDK 的 VM ware Vsphere 的自定义属性
- java - Java中的REST POST方法
- python-3.x - Web2py,我如何在列表中使用内部连接进行选择:参考
- c# - 当gridview在页面加载时加载时默认加载第二页
- react-native - 无法在反应原生的两个不同堆栈之间正确导航并保留功能
- android - Chromecast:是否可以通过 Chromecast 接收器应用程序覆盖发送到发送者应用程序的进度?
- macos - pip 和 conda 的 OS X Mojave ModuleNotFoundError
- python - 将字符串作为列表返回?
- ms-access - 如何在 MS Access 中创建有效的 iif 子句