SELECT `Nen Straatnaam` as street, `Nen Woonplaats` as city, Gemeente,
Postcode, acn_distinct.zipcodes, acn_distinct.lat, acn_distinct.lng
FROM `acn_distinct` INNER JOIN crimes as c
ON `Nen Woonplaats` = c.place AND c.street_check = 0
ORDER BY street ASC
EXPLAIN
向我提供了这些信息:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE c ref idx_place,idx_street_check,fulltext_place idx_street_check 1 const 67556 Using temporary; Using filesort
1 SIMPLE acn_distinct ref ID_nen_woonplaats ID_nen_woonplaats 768 crimes.c.place 42 Using index condition
那么为什么不使用建议的索引?
答案 0 :(得分:1)
它正在使用索引idx_street_check
,但是,性能会很糟糕,因为它也会创建一个临时表并使用filesort
这两个都是臭名昭着的罪魁祸首。
问题是为什么它没有在crimes.place
上使用索引。我会尝试在(place,street_check)上创建一个多列索引。
但更重要的是,我认为你的表架构非常非常糟糕。你的JOIN形成不好:
FROM `acn_distinct` INNER JOIN crimes as c
ON `Nen Woonplaats` = c.place AND c.street_check = 0
当你在表A和B之间进行JOIN时,你应该这样加入:A.x = B.y.但在这种情况下,你甚至没有提到表A.你将A中的行数乘以B的特定子集。