簡體   English   中英

應該按哪個順序(表列或查詢)創建復合索引?

[英]In which order(table column or query) composite index should made?

我有一個示例表,例如-

CREATE TABLE `cdr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `dataPacketDownLink` bigint(20) DEFAULT NULL,
  `dataPacketUpLink` bigint(20) DEFAULT NULL,
  `dataPlanEndTime` datetime DEFAULT NULL,
  `dataPlanStartTime` datetime DEFAULT NULL,
  `dataVolumeDownLink` bigint(20) DEFAULT NULL,
  `dataVolumeUpLink` bigint(20) DEFAULT NULL,
  `dataplan` varchar(255) DEFAULT NULL,
  `dataplanType` varchar(255) DEFAULT NULL,
  `createdOn` datetime DEFAULT NULL,
  `deviceName` varchar(500) DEFAULT NULL,
  `duration` int(11) NOT NULL,
  `effectiveDuration` int(11) NOT NULL,
  `hour` tinyint(4) DEFAULT NULL,
  `eventDate` datetime DEFAULT NULL,
  `msisdn` bigint(20) DEFAULT NULL,
  `quarter` tinyint(4) DEFAULT NULL,
  `validDays` int(11) DEFAULT NULL,
  `dataLeft` bigint(20) DEFAULT NULL,
  `completedOn` datetime DEFAULT NULL,
  `evedate` date NOT NULL DEFAULT '0000-00-00',
  PRIMARY KEY (`id`,`evedate`),
  KEY `evedate_index` (`evedate`),
  KEY `eve_hour_index` (`evedate`,`hour`),
  KEY `eve_msisdn_index` (`evedate`,`msisdn`)
) ENGINE=MyISAM AUTO_INCREMENT=259341694 DEFAULT CHARSET=latin1
/*!50500 PARTITION BY RANGE  COLUMNS(evedate)
(PARTITION `START` VALUES LESS THAN ('2013-09-01') ENGINE = MyISAM,
 PARTITION p01 VALUES LESS THAN ('2013-09-08') ENGINE = MyISAM,
 PARTITION p02 VALUES LESS THAN ('2013-09-15') ENGINE = MyISAM,
 PARTITION p03 VALUES LESS THAN ('2013-09-22') ENGINE = MyISAM,
 PARTITION p04 VALUES LESS THAN ('2013-09-29') ENGINE = MyISAM,
 PARTITION p05 VALUES LESS THAN ('2013-10-06') ENGINE = MyISAM,
 PARTITION p06 VALUES LESS THAN ('2013-10-12') ENGINE = MyISAM,
 PARTITION p07 VALUES LESS THAN ('2013-10-19') ENGINE = MyISAM,
 PARTITION p08 VALUES LESS THAN ('2013-10-25') ENGINE = MyISAM,
 PARTITION p09 VALUES LESS THAN ('2013-10-31') ENGINE = MyISAM,
 PARTITION p10 VALUES LESS THAN (MAXVALUE) ENGINE = MyISAM) */

現在查看索引eve_hour_index(evedate,hour)和eve_msisdn_index(evedate,msisdn)的順序。 但是我最后宣布了依法特。

我讀過某個地方,復合索引的順序很重要。 那么哪個命令? 查詢順序還是表順序?

我是否必須將此復合索引重新編寫為eve_hour_index(hour,evedate)和eve_msisdn_index(msisdn,evedate)?

還是第一個是正確的?

謝謝。

簡而言之,列的索引對象包含已排序的該列的值,以便可以快速找到給定值。 對於組合索引,它是相似的,但是組合索引中列的值被合並並排序,因此涉及組合索引中所有列的任何查詢都快得多。

請注意,如果您在A和B列上有一個復合索引(按此順序指定),它將大大提高同時具有A和B條件的查詢的速度,可以幫助加快僅具有A條件的查詢的速度,可能對僅滿足條件B的查詢沒有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM