4,000,000 レコードのテーブルがあります。(user_id int, partner_id int, PRIMARY_KEY ( user_id )) engine=InnoDB; というテーブルが作成されます。select
100 レコードのパフォーマンスをテストしたい。次に、次のようにテストしました。
mysql> explain select user_id from MY_TABLE use index (PRIMARY) where user_id IN ( 1 );
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------------+
| 1 | PRIMARY | MY_TABLE | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------------+
1 row in set, 1 warning (0.00 sec)
これで結構です。ただし、このクエリは mysql によってバッファリングされます。したがって、このテストは最初のテストの後にノーになります。
次に、ランダムな値で選択するSQLを考えました。私は以下をテストしました:
mysql> explain select user_id from MY_TABLE use index (PRIMARY) where user_id IN ( select ceil( rand() ) );
+----+-------------+----------+-------+---------------+---------+---------+------+---------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+---------------+---------+---------+------+---------+--------------------------+
| 1 | PRIMARY | MY_TABLE | index | NULL | PRIMARY | 4 | NULL | 3998727 | Using where; Using index |
+----+-------------+----------+-------+---------------+---------+---------+------+---------+--------------------------+
しかし、それは悪いです。
Explain
possible_keys が NULL であることを示しています。そのため、完全なインデックス スキャンが計画されていますが、実際には以前よりも遅すぎます。
では、インデックスルックアップでランダム値を記述する方法を教えていただきたいと思います。
ありがとう