В настоящее время у меня массивный запрос (с использованием PHP и MySQL), и я не уверен, как его оптимизировать, чтобы уменьшить его массовую нагрузку 18-25 секунд. Я просмотрел предыдущие ответы и обнаружил, что они все пишут аналогично большое количество кода, что приводит к аналогичному времени выполнения скрипта, поэтому я хотел бы посмотреть, есть ли у кого-нибудь альтернативные идеи, а не те, которые уже есть Положения:Выберите MAX() из нескольких столбцов в MySQL
TLDR; нужно выбрать максимальную колонку для каждого аналитика ID и это происходит на массивной нагрузке и поэтому мне нужно, чтобы уменьшить его как-то
$qry = "SELECT DISTINCT ip,country_code,country,
(SELECT MAX(region) FROM analytics RegOne WHERE bid='$id' AND RegOne.ip= IPOne.ip) AS region,
(SELECT MAX(city) FROM analytics CitOne WHERE bid='$id' AND CitOne.ip= IPOne.ip) AS city,
(SELECT MAX(os) FROM analytics OSOne WHERE bid='$id' AND OSOne.ip= IPOne.ip) AS os,
(SELECT MIN(browser) FROM analytics BroOne WHERE bid='$id' AND BroOne.ip= IPOne.ip) AS browser,
(SELECT MIN(resolution) FROM analytics ResOne WHERE bid='$id' AND ResOne.ip= IPOne.ip) AS resolution,
(SELECT MAX(timestamp) FROM analytics DateOne WHERE bid='$id' AND DateOne.ip= IPOne.ip) AS LatestDate
FROM analytics AS IPOne
WHERE bid='$id'
ORDER BY LatestDate DESC
LIMIT 15 OFFSET $offset";
Это берет данные из массивного стола, и поэтому я не ожидал чтобы сделать 0 секунд, однако любое уменьшение времени будет штрафом, а не ~ 21 секундой.
Я просто проиндексировал их; по какой-то причине он не позволил мне сделать из них первичный ключ/составной ключ, однако спасибо! Индексация, похоже, работала как шарм. – Josh
@ Josh «ключ» и «индекс» означают то же самое в MySQL. У вас может быть только один первичный ключ, у вас может быть столько других ключей, сколько вы хотите. – Barmar