我有一个巨大的表格,我想用一个或条件运行查询
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子句移动并在同一个上创建单个列索引?
答案 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)
。