为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2019-08-12 11:10:50
我什么时候应该使用复合索引?我应该何时在数据库中使用复合索引?使用复合索引的性能分支是什么?我为什么要使用复合索引?例如,我有一张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  ;是否有意义,我使用的复合指数都geolat和geolng,这样的:我替换:  KEY `geolat` (`geolat`),   KEY `geolng` (`geolng`),有:KEY `geolat_geolng` (`geolat`, `geolng`)如果是这样:为什么?使用复合索引的性能分支是什么?我不太明白如何阅读EXPLAIN命令。这看起来好还是坏。现在,我没有使用geolat和geolng的综合指数。我可以做?
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

在使用受益的查询时,应使用复合索引。一个如下所示的复合索引:

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是如何丢失的。

在您的原始示例中,两个维度的复合索引将主要有益于在两个维度或最左侧维度上查询的查询,而不是最右侧维度。如果你总是在查询两个维度,那么复合索引是要走的路,首先(最有可能)并不重要。


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 1098 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信