Я хочу выбрать случайную запись из большой таблицы. После поиска нашли наконец два решения;выберите случайную запись из таблицы, почему сначала медленно, чем секунда?
: с
select id from `table` where id = (floor(1 + rand() * 2880000));
б:
select id from `table` where id >= (floor(1 + rand() * 2880000)) limit 1;
Но первое (а) решение далеко медленнее, чем вторых (б), примерно в 40 раз медленнее.
После выполнения много раз, я нахожу более странную проблему. Первое решение может вернуть две записи.
select id from `table` where id = (floor(1 + rand() * 2880000));
+---------+
| id |
+---------+
| 2484024 |
| 1425029 |
+---------+
2 rows in set (1.06 sec)
Мой вопрос:
- Почему первое решение медленнее, чем второе решение?
- Почему первое решение возвратило две записи?
Моя версия MySQL:
mysql> show variables like "%version%";
+-------------------------+-------------------------+
| Variable_name | Value |
+-------------------------+-------------------------+
| innodb_version | 5.5.43 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.43-0ubuntu0.12.04.1 |
| version_comment | (Ubuntu) |
| version_compile_machine | x86_64 |
| version_compile_os | debian-linux-gnu |
+-------------------------+-------------------------+
7 rows in set (0.04 sec)
Спасибо за любую помощь.