我是一个简单的查询,计算项目数。 表项有1.5M记录。出于某种原因,运行查询需要65秒! 查询返回30,000
SELECT count(*)
FROM `items`
WHERE `items`.`owner_id`
IN (1, 2, 3, 4, 5, 6, 7, 8)
AND items.is_hidden = false
编辑:添加'和'完全描述问题的条款
说明显示查询正在使用此索引:
1 SIMPLE items range idx_owner idx_owner 4 NULL 258 Using index condition; Using where
这些是表格的索引:
items 0 PRIMARY 1 id A 1444298 NULL NULL BTREE
items 1 items_a951d5d6 1 slug A 288859 767 NULL BTREE
items 1 category_id_refs_id_3b77a81e 1 category_id A 34 NULL NULL YES BTREE
items 1 origin_id_refs_id_99b3fd12 1 origin_id A 2 NULL NULL YES BTREE
items 1 parent_id_refs_id_99b3fd12 1 parent_id A 6 NULL NULL YES BTREE
items 1 name 1 name A 1444298 NULL NULL BTREE
items 1 idx_owner 1 owner_id A 722149 NULL NULL BTREE
为什么需要这么长时间?有什么方法可以改善吗?
答案 0 :(得分:1)
尝试使用临时表和JOIN:
CREATE TEMPORARY TABLE owner_ids (id INT PRIMARY KEY);
INSERT INTO owner_ids VALUES (1),(2),(3),(4),(5),(6),(7),(8);
SELECT count(*)
FROM items
JOIN owner_ids ON owner_ids.id = items.owner_id
答案 1 :(得分:1)
尝试创建两列的索引:
CREATE INDEX idx_both_columns ON `items` (`owner_id`, `is_hidden`);