我什么时候应该使用复合索引?

我什么时候应该使用复合索引?

  1. 我应该何时在数据库中使用复合索引?

  2. 使用复合索引的性能分支是什么?

  3. 我为什么要使用复合索引?

例如,我有一张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  ;

是否有意义,我使用的复合指数都geolatgeolng,这样的:

我替换:

  KEY `geolat` (`geolat`),
  KEY `geolng` (`geolng`),

有:

KEY `geolat_geolng` (`geolat`, `geolng`)

如果是这样:

  • 为什么?

  • 使用复合索引的性能分支是什么?

我不太明白如何阅读EXPLAIN命令。这看起来好还是坏。现在,我没有使用geolat和geolng的综合指数。我可以做?


红糖糍粑
浏览 1099回答 3
3回答

慕的地10843

在使用受益的查询时,应使用复合索引。一个如下所示的复合索引:index( column_A, column_B, column_C )将使用这些字段进行连接,过滤和有时选择的查询受益。它还将有益于使用该组合中最左侧列的子集的查询。所以上面的索引也将满足需要的查询index( column_A, column_B, column_C )index( column_A, column_B )index( column_A )但它不会(至少不直接,也许它可以帮助部分,如果没有更好的索引)帮助查询需要index( column_A, column_C )注意column_B是如何丢失的。在您的原始示例中,两个维度的复合索引将主要有益于在两个维度或最左侧维度上查询的查询,而不是最右侧维度。如果你总是在查询两个维度,那么复合索引是要走的路,首先(最有可能)并不重要。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL