【发布时间】:2016-03-23 21:54:35
【问题描述】:
我在 iOS 应用上有这个查询:
EXPLAIN QUERY PLAN SELECT
m.`id`, m.`no`, m.`name`, m.`image`, m.`stock`,
mp.`unit_price_from`, mp.`unit_list_price_from`, mp.`unit_price`, mp.`unit_list_price`,
(SELECT COUNT(`color_no`) FROM `variants` WHERE `model_no` = m.`no`) AS `variants_count`,
(SELECT COUNT(DISTINCT `color_no`) FROM `variants` WHERE `model_no` = m.`no`) AS `styles_count`
FROM `models` m
LEFT JOIN `model_prices` mp ON mp.`model_id` = m.`id`
WHERE
`noos` = 2 OR `noos` = 1
在我的 MacBook 上的模拟器上,这只需要在 124ms 和 144ms 之间。我在 model_no、color_no 和它们的组合变体上尝试了不同的 INDEXES,但它们并没有导致更快的查询。在 iPad 3 上,将查询放慢到640ms 变得更加乏味。这给我真正想要摆脱的应用程序的感觉带来了一点小问题。
models 表在noos 字段上也已经有一个索引。
variants 表包含 12677 条记录。
model_prices 表包含 2792 条记录。
models 表包含 2792 条记录。
我想知道是否有某种方法可以改革 COUNT 子查询以在 SQLite 中获得更快的结果。我只喜欢使用某种手动缓存作为最后的手段,但想先看看你们中的一些人是否会在这里看到一些优化的可能性。
这是解释结果:
【问题讨论】: