22mの行を持つテーブルから、ユーザの購読者数を取得しようとしています。以下同じクエリは、(ユーザーのサブスクリプションを取得します)しかし、(のみ0.0036秒ロードする必要があるmysql COUNT()num rows too slow
をロードするために12.6020秒を必要と
SELECT
COUNT(id)
FROM
subscribers
WHERE
suid=541839243781
:
私のSQLは以下のとおりです。
SELECT
COUNT(uid)
FROM
subscribers
WHERE
uid=541839243781
はEXPLAIN私の)OKらしい:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE dvx_subscribers index 4 4 16 NULL 22041275 Using where; Using index
SHOWは、CREATE TABLE:
CREATE TABLE `subscribers` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`sid` bigint(20) unsigned NOT NULL,
`uid` bigint(20) unsigned NOT NULL,
`suid` bigint(20) unsigned NOT NULL,
`date` datetime NOT NULL,
KEY `id` (`id`),
KEY `2` (`uid`,`suid`),
KEY `4` (`suid`,`id`)
) ENGINE=MyISAM AUTO_INCREMENT=23226599 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
INDEXES:
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
subscribers 1 id 1 id A NULL NULL NULL BTREE
subscribers 1 2 1 uid A 449821 NULL NULL BTREE
subscribers 1 2 2 suid A 459193 NULL NULL BTREE
subscribers 1 4 1 suid A 6115 NULL NULL BTREE
subscribers 1 4 2 id A 22041275 NULL NULL BTREE
どのように私はインデックスそれか、できるだけ速くロードするためにそれを最適化することができますか?原因は12秒です。
'id'と' suid'、または 'suid'だけでインデックスを作成します。 @DanielKamilKozar。 –
なぜ 'suid'だけでいいの? (あなたがそれを省略したところで答えをアップアップしました...) – gdoron
4秒間定数かそれとも変量ですか? –