(Имеется в виду выборка единственной строки. Примечание переводчика)
Это одна из тех вещей, который выглядят очень хорошо на первый взгляд, но многие начинающие программисты попались на эту удочку. Вы даже не представляете, какое слабое место в производительности возникнет, если будете использовать это в запросах.
Если вам действительно нужен случайный порядок строк в запросе, то есть лучшие способы сделать это. Конечно, это приведет к дополнительному коду, но позволит избавиться от слабого места в производительности, которое будет сужаться экспоненциально при увеличении данных. Проблема в том, что MySQL будет выполнять RAND() (а это нагрузка на процессор) для каждой строки при сортировке, выдавая только одну строку.
Таким образом вы выберите случайный номер, который меньше количества строк и используете его для смещения в LIMIT.
7. Избегайте SELECT *
Чем больше данных считывается из таблицы, тем медленнее запрос. Это увеличивает время работы с хранилищем данных. Также, когда сервер базы данных установлен отдельно от web-сервера, будет большая задержка при передаче данных по сети.
Прописывать, какие именно столбцы из запроса вам нужны — хорошая привычка.
1. // не очень хорошо:
2. $r = mysql_query(«SELECT * FROM user WHERE user_id = 1»);
3. $d = mysql_fetch_assoc($r);
4. echo «Welcome {$d['username']}»;
5.
6. // лучше:
7. $r = mysql_query(«SELECT username FROM user WHERE user_id = 1»);
8. $d = mysql_fetch_assoc($r);
9. echo «Welcome {$d['username']}»;
10.
11.// разница более значительна при большем наборе данных.