我有3张桌子:
- 区| id,zipcode,district
- 订阅| id,userid,status,level
- 个人资料| id,userid,zip
醇>
我正在尝试计算来自有效订阅的邮政编码数量,并按地区分组。 (我正在使用LEFT(),所以我可以在##### - ####格式中包含拉链)。查询在本地工作6.4秒,但在服务器上没有及时输出。我该怎么做才能加快速度呢?
我写道:
SELECT COUNT( d.zipcode ) total, d.district
FROM districts AS d
JOIN profile AS p ON d.zipcode = LEFT(p.zip, 5)
JOIN subscriptions AS s ON s.userid = p.userid
WHERE s.status = 1
GROUP BY d.district
谢谢!
答案 0 :(得分:3)
创建索引: d.zipcode p.zip s.userid p.userid s.status
答案 1 :(得分:3)
那是因为你在联盟中使用了一个功能。因此,不能使用索引。为什么在表格档案中保存拉链?保存区域.id在配置文件而不是zip,这是有道理的。
编辑:实际上你不应该像Dweeves建议的那样做过度索引。但是你应该在引用区域的配置文件中添加一个外键。ALTER TABLE profile ADD CONSTRAINT fk_zip_districts FOREIGN KEY (districtsId) REFERENCING districts(id);
假设你喜欢我上面说过的话。
profile | id, userId, districtsId