首页 > 解决方案 > MYSQL 对 JOIN 查询的最佳使用索引

问题描述

我有两张桌子

homes_info有 4 列

 home_id (primary_key)  
 title (varchar)
 price (double)
 location_id (foreign key)

我还有另一张桌子

locations有 3 列

 location_id (primary key)
 location_name (varchar)
 location_state (varchar)

我只想做这两个查询

SELECT * FROM homes_info WHERE title = 'xxxxx' && price = 'xxxx'

SELECT * FROM homes_info LEFT JOIN locations on homes_info.location_id = locations.location_id WHERE title = 'xxx' && price = 'xxxxx' && location_name = 'xxxx'

以下是使用上述表上的索引来优化上述两个查询的最佳方法吗?

ALTER TABLE homes_info ADD INDEX(title, price)

ALTER TABLE locations ADD INDEX(location_name)

我知道对于第一个查询,复合索引INDEX(title, price)比单独的索引更好,但是第二个查询(我使用的地方LEFT JOIN)呢?对第二个查询使用单独的索引title和列会更好price

简而言之,这两个表上的索引对于优化上述两个查询的最佳用途是什么?

谢谢!

标签: mysql

解决方案


对于表位置,您可以使用 y .. 您可以使用单个复合

ALTER TABLE locations ADD locations_info INDEX(location_name , localtion_id)

使用带有 localtion_name 和 location_id 的组合,您可以确定 where (join) 子句所需的所有信息都由索引解析,避免访问数据表以获取 .. location_id


推荐阅读