немного оптимизации или "Блок кто в сети" из ядрёного модуля user
Вот кусок кода из user_block
отвечающий за составления списка пользователей онлайн.
// Perform database queries to gather online user lists. We use s.timestamp
// rather than u.access because it is much faster.
$anonymous_count = sess_count($interval);
$authenticated_users = db_query('SELECT DISTINCT u.uid, u.name, s.timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.timestamp >= %d AND s.uid > 0 ORDER BY s.timestamp DESC', $interval);
Смотрим на запрос и думаем - а какого Художника был просто не сделан запрос к таблице users с условием по полю acceess
обращаем внимание на комментарий выше, где нам пытаются обьяснить:
мол использование индекса из таблицы session это значительно быстрее чем использование чистой таблицы users и поля access
Мы не поверим автору и загляним в EXPLAIN
вводные
таблица SESSION 37МБ
таблица users 103МБ
О ЧУДО
Автор этого запроса явно МНОГО КУРИЛ БАМБУКА а не православного канабиса.
даже невооруженным глазом видно, что использование таблицы session не просто МАРАЗМ а еще и КРАЙНЕ ВРЕДНЫЙ МАРАЗМ
о чем ВОПИТ Using where; Using temporary; Using filesort
Попробуем все таки понять как ТАКОЕ могло попасть в ядро