理解したい興味深い問題に遭遇しました。私はテーブルを持っています:
`id` BIGINT(20) unsigned NOT NULL AUTO_INCREMENT,
`user_id` BIGINT(20) unsigned NOT NULL,
`followers_count` INT(10) unsigned NOT NULL DEFAULT 0,
`friends_count` INT(10) unsigned NOT NULL DEFAULT 0,
`statuses_count` INT(10) unsigned NOT NULL DEFAULT 0,
`favourites_count` INT(10) unsigned NOT NULL DEFAULT 0,
`listed_count` INT(10) unsigned NOT NULL DEFAULT 0,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
次のクエリを実行します。
SELECT
followers_count
,friends_count
,statuses_count
,favourites_count
,listed_count
, UNIX_TIMESTAMP(DATE(created_at
)) ASid
FROMuser_track
WHEREcreated_at
>=DATE_SUB(NOW(),INTERVAL 14 DAY) ANDuser_id
='1234567'
さて、興味深い部分:
1:そのテーブルに次のインデックスがある場合、クエリが完了するまでに数分かかります。
インデックス
user_numbers
(created_at
,user_id
,followers_count
,friends_count
,statuses_count
, )favourites_count
_listed_count
上記のインデックス 1 を使用してクエリを説明します。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE user_track range user_numbers user_numbers 12 NULL 1119318 Using where; Using index
2:ただし、そのテーブルの次のインデックスでは、200 ミリ秒未満かかります。
インデックス
user_report
(user_id
,id
,created_at
,followers_count
,friends_count
, )statuses_count
_favourites_count
_listed_count
上記のインデックス 2 を使用してクエリを説明します。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE user_track ref user_report user_report 8 const 1 Using where; Using index
クエリを説明すると、最初のインデックスでは多くの行がスキャンされるのに対し、2 番目のインデックスには "ref: const" があり、数行しかスキャンされないことがわかります。しかし、なぜこれが起こるのかを理解したいと思います。