Mysql 在3列上创建索引的最佳方法是什么?如果可能的话?
我们有一个SQL查询正在执行完整表扫描:Mysql 在3列上创建索引的最佳方法是什么?如果可能的话?,mysql,indexing,mariadb-10.3,Mysql,Indexing,Mariadb 10.3,我们有一个SQL查询正在执行完整表扫描: 删除 从oc_车 其中(api\u id>?或客户\u id=?) 添加日期?比添加日期更具选择性,那么这可能是最好的: DELETE FROM oc_cart WHERE api_id > ? AND date_added < DATE_SUB(NOW(), INTERVAL ? HOUR); DELETE FROM oc_cart WHERE customer_id = ? AND date_added &
删除
从oc_车
其中(api\u id>?或客户\u id=?)
添加日期
是否可以创建索引来优化此查询
目前,我创建了两个索引:
- 添加了一个日期为的
- 一个在(添加日期、客户id和api id)
但查询似乎仍在进行完全扫描。表中有多少行?
SHOW CREATE TABLE
提供了什么代码>解释选择…`
不可能对查询进行太多优化
如果api\u id>?
比添加日期更具选择性,那么这可能是最好的:
DELETE
FROM oc_cart
WHERE api_id > ?
AND date_added < DATE_SUB(NOW(), INTERVAL ? HOUR);
DELETE
FROM oc_cart
WHERE customer_id = ?
AND date_added < DATE_SUB(NOW(), INTERVAL ? HOUR);
如果api\u不是选择性的,也可以添加
INDEX(date_added, api_id) (but _not_ INDEX(date_added))
添加日期的索引是多余的。(我想我说得对)另一个索引只能部分使用。如果(date\u added,customer\u id)没有帮助,请尝试(date\u added,api\u id),并尝试围绕索引顺序进行交换。你可以采取更科学的方法,但这里的排列太少了,以至于“吸一口,看一看”会更快
INDEX(date_added, api_id) (but _not_ INDEX(date_added))