Mysql查询 - 更快?

时间:2016-03-20 23:32:13

标签: mysql sql

所以我有这个MySQL查询,因为我有很多记录,这变得很慢,使用该软件的计算机(收银机)也不是那么强大。 有没有办法获得相同的结果,但速度更快?非常感谢帮助!

SELECT d.sifra, COUNT(d.sifra) AS pogosti, c.*, s.Stevilka as Stev_sk FROM Cenik c, dnevna d, Podskupina s 
WHERE d.sifra = c.Sifra AND d.datum >= DATE(DATE_SUB(NOW(),INTERVAL 3 DAY))
GROUP BY d.sifra ORDER BY pogosti DESC limit 27

3 个答案:

答案 0 :(得分:0)

您是否尝试过索引

你在WHERE中使用c.Sifra,所以你可能想要

CREATE INDEX Cenik_Sifra ON Cenik(Sifra);

你也使用dnevna的datum和sifra,而datum是你的SELECT,所以

CREATE INDEX dnevna_ndx ON dnevna(datum, sifra);

最后,在Podskupina没有加入条件,你从那里画Stevilka。这是一张不变的表吗?事实上,你只是计算Podskupina中的行和/或从中获取未指定的值,除非它只有一行。

在某些版本的MySQL上,您可能还会发现预先计算数据的好处:

SELECT @datum := DATE(DATE_SUB(NOW(), INTERVAL 3 DAY))

然后在查询中使用@datum。这可能会提高其良好的索引性能的机会。

但是,如果不了解所涉及的表格的结构和基数,那么可以做的很少。

至少你应该发布

的结果
EXPLAIN SELECT...(your select)

问题。

答案 1 :(得分:0)

你没有条件加入Podskupina,你得到交叉加入(全部都是),所以你从加入得到x行" d.sifra = c.Sifra"乘以y行的Podskupina s

答案 2 :(得分:0)

这看起来像一个非常有问题的查询。你真的需要归还所有的c。*? Podskupina的加入或过滤器在哪里?一旦收紧查询,请确保已在表上创建了良好的索引。例如,假设您已经在唯一ID上获得了聚合索引作为dnevna中的主键,性能通常会通过在sifra和datum列上放置二级索引而获益。

相关问题