Получение онлайн-пользователей из большой таблицы записей

#php #mysql

#php #mysql

Вопрос:

у меня есть большая запись данных из таблицы onlines. (более 40 миллионов записей)

теперь я хочу показать онлайн-пользователя в любое время из таблицы, но выполнить это с сервера не удалось…

например, когда я отправляю запрос get online на прошлой неделе, это доза не работает (потому что в таблице очень большая запись).

это мой пример php-кода:

 $d = $_GET['date'];
$time   = time() - 60*60 * 24 * $d;
$phql   = "SELECT DISTINCT aid FROM onlines WHERE time > '$time'";
  

итак, у вас есть какие-нибудь лучшие советы?

Спасибо.

Комментарии:

1. Это не работает , каким образом это не работает. Вы получаете сообщение об ошибке, если да, не хотели бы вы поделиться им с нами, просто для удовольствия

2. Попробуйте заменить ‘$ time’ на ‘ «. $ time.» ‘, а также связать ваш параметр, чтобы предотвратить внедрение sql.

3. также поделитесь примером значений столбцов time ?

4. @Bonzo В запросе в его нынешнем виде нет ничего плохого.

5. все работает нормально. Но когда записей слишком много, сервер не может ответить.

Ответ №1:

Используйте EXPLAIN SELECT ... , чтобы увидеть, какие индексы определены в вашей таблице. Убедитесь, что, особенно для больших таблиц, ваши столбцы, которые вы запрашиваете, проиндексированы. В этом случае time .

Вы можете создать индекс с помощью:

 CREATE INDEX time_index ON onlines (time);
  

Это должно ускорить выполнение запроса. Если вас не волнует потенциальная потеря или сохранение данных, вы можете использовать таблицу в памяти, чтобы избежать ввода-вывода. Это значительно ускоряет запросы, но опустошает таблицу при перезапуске сервера или отключении MySQL.