[英]MySQL queries very slow
所以我有一个很大的数据库,并且每天都在增长。 但是我不太了解如何更快地使用它。 我也不知道索引如何工作。
这是我数据库中的表:
第一个表格是包含所有车辆信息的表格:
nm_voertuig:
+----+----------+------+--------+--------+-------+
| id | kenteken | merk | model | deuren | kleur |
+----+----------+------+--------+--------+-------+
| 1 | 12KT43 | Opel | ZAFIRA | 5 | Blue |
| 2 | G345CP | Audi | A3 | 3 | Black |
+----+----------+------+--------+--------+-------+
该表中有500万行。
nm_voertuig_statistieken:
+----+------------+----------+-------+---------+
| id | datum | kenteken | prijs | kmstand |
+----+------------+----------+-------+---------+
| 1 | 2016-01-05 | 12KT43 | 5000 | 150000 |
| 1 | 2016-01-06 | 12KT43 | 4900 | 150000 |
| 2 | 2016-01-05 | G345CP | 12000 | 100000 |
+----+------------+----------+-------+---------+
每天数据库将填充当天的价格。 因此,只要汽车仍然可用,每天都会有新的一排。
因此,例如,我想获得一个欧宝赛飞利的最小和最大行驶里程。 这是我尝试过的查询:
SELECT MIN(kmstand), MAX(kmstand)
FROM (
SELECT v.id
FROM nm_voertuig v
WHERE merk = 'Opel' AND model = 'ZAFIRA'
) AS cnt
JOIN nm_voertuig_statistieken vs
ON cnt.id = vs.id
我怎样做才能使查询更快?
首先,您应该重写查询。 MySQL中的子查询会产生实现所需的开销。 所以:
SELECT MIN(vs.mileage), MAX(vs.mileage)
FROM nm_voertuig v JOIN
nm_voertuig_statistieken vs
ON v.id = vs.id
WHERE v.make = 'Opel' AND v.model = 'ZAFIRA';
然后,对于此索引,您需要以下索引:
CREATE INDEX idx_nm_voertuig_make_model_id
ON nm_voertuig(make, model, id);
CREATE INDEX idx_nm_voertuig_statistieken_id_milage
ON nm_voertuig_statistieken(id, mileage);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.