#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.