例如,我有一张homes桌子:
CREATE TABLE IF NOT EXISTS `homes` (
`home_id` int(10) unsigned NOT NULL auto_increment,
`sqft` smallint(5) unsigned NOT NULL,
`year_built` smallint(5) unsigned NOT NULL,
`geolat` decimal(10,6) default NULL,
`geolng` decimal(10,6) default NULL,
PRIMARY KEY (`home_id`),
KEY `geolat` (`geolat`),
KEY `geolng` (`geolng`),
) ENGINE=InnoDB ;
Run Code Online (Sandbox Code Playgroud)
是否有意义,我使用的复合指数都geolat和geolng,这样的:
我替换:
KEY `geolat` (`geolat`),
KEY `geolng` (`geolng`),
Run Code Online (Sandbox Code Playgroud)
有:
KEY `geolat_geolng` (`geolat`, `geolng`)
Run Code Online (Sandbox Code Playgroud)
如果是这样:
更新:
由于很多人都声明它完全依赖于我执行的查询,因此下面是最常见的查询:
SELECT * FROM homes
WHERE geolat BETWEEN ??? AND …Run Code Online (Sandbox Code Playgroud) 所以假设我有一个包含两个索引的表 - 一个在列a上,另一个在列a,b和c上.
我注意到,根据索引定义中列的顺序,MySQL可能会使用单列索引而不是多列索引,即使多列索引中的所有三列都在ON中被引用加入的一部分.
这有点引出了一个问题......如何找出列的理想排序?你只需要暴力吗?