OR条件的MySQL综合索引

时间:2017-07-07 11:21:24

标签: mysql database indexing

我有一个巨大的表格,我想用一个或条件运行查询

root@tegra:~# zcat /proc/config.gz | grep 'CONFIG_PRINTK_TIME'
CONFIG_PRINTK_TIME=y
root@tegra:~#

该表现在超过5000万条记录,需要几分钟才能执行。我尝试在密钥 status,updated和uploaded_on 上创建一个复合索引(与查询的顺序相同)但事实证明,查询没有使用带有两个不同的OR的复合索引列。

有没有办法创建索引来优化查询,或者我应该将uploaded_on作为第一个where子句移动并在同一个上创建单个列索引?

1 个答案:

答案 0 :(得分:1)

使用union all编写查询:

SELECT id, upload_key 
FROM product_data 
WHERE status = 0 and uploaded_on is NULL
UNION ALL
SELECT id, upload_key 
FROM product_data 
WHERE status <> 0 and updated = 0 and uploaded_on is NULL;

您需要两个索引:(status, uploaded_on)(updated, uploaded_on, status)