根据id或文本描述符编写查询

时间:2014-03-29 21:19:21

标签: mysql coding-style

我需要查询包含不同级别地理位置的数据的数据库,而且我通常只需要国家/地区数据。

SELECT * FROM outputs
 LEFT JOIN locations USING (location_id)
 WHERE locations.type = 'country'

但是,locations表中的type列不是索引,因此可能导致查询速度非常慢。如果我使用索引type_id(4 ='country')

,速度要快得多
SELECT * FROM outputs
 LEFT JOIN locations USING (location_id)
 WHERE locations.type_id = 4 

这最终会更快,但更不清楚(在我的实际查询中,我有更多的JOINS和id)。是否有一个很好的妥协,我可以清楚地查询我的查询,但仍然可以根据ID快速工作?我可以想到一个解决方案,从MySQL的角度来看它是否有意义?

SELECT * FROM outputs
 LEFT JOIN locations USING (location_id)
 WHERE locations.type_id = (SELECT type_id FROM location_types WHERE type = 'country') 

这样我仍然可以使用索引的id列执行大型查询,但为了清楚起见,将明文放在查询中。还有更好的方法吗?

0 个答案:

没有答案