Помогите сделать индексы mysql

12
N
На сайте с 09.06.2012
Offline
63
1360

Доброго времени всем, подскажите как сделать индекс чтобы уменьшить время обработки запроса в mysql? Изучал на mssql server но там тоже не до конца понял это. А сейчас встала острая необходимость на сайтах некоторых Query_time больше 10 -15 секунд. Как индексы составить есть какие то толковые материалы с примерами? Вроде и не много строк в таблице там таблица с тегами у меня всего 3 ляма и материалы к ним 500 к примерно. Странно что так мускл работает тупо.

Спасибо

C
На сайте с 26.10.2013
Offline
54
#1

Структуру таблиц, примеры запросов - все в студию

Ну и вопрос больше в вебстроительство, конечно

Услуги по парсингу данных (/ru/forum/939826), единоразовый и регулярный сбор данных. Любые объемы. Скрипты на PHP, создание и доработка, решение проблем с сайтами Пишите в личные сообщения или скайп
N
На сайте с 09.06.2012
Offline
63
#2

Вот к примеру запрос

# Time: 160719 23:30:49

# User@Host: root[root] @ localhost []

# Query_time: 7.660115 Lock_time: 0.000078 Rows_sent: 30 Rows_examined: 2592667

SET timestamp=1468960249;

SELECT `tags`.`tag`, `tags`.`target`, COUNT(tags.id) AS COUNT_TAGS

FROM (`tags`)

LEFT JOIN `films` ON `films`.`id` = `tags`.`target_id`

GROUP BY `tags`.`tag`

ORDER BY `COUNT_TAGS` DESC

LIMIT 30;

Пример таблицы tags

http://joxi.ru/5mdv5YgsvWQnVA

Пример таблицы films

id title text user

Так идет

C
На сайте с 26.10.2013
Offline
54
#3

Ну а индексы какие проставлены в данный момент?

tags.id, tags.target_id, films.id?

По tags.id и tags.targer_id можно составной индекс попробовать

N
На сайте с 09.06.2012
Offline
63
#4

Спасибо за ответ вот на tags таблицу стоит

http://joxi.ru/krDjGlzS0Yy692

на films стоит

PRIMARY id

FULLTEXT title но это я вообще не знаю если честно что за тип в mysql

Оптимизайка
На сайте с 11.03.2012
Offline
396
#5

left join вам в этом запросе обязательно нужен? можно использовать обычный inner join?

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
ValdisRu
На сайте с 02.10.2006
Offline
139
#6

имхо, проще всего через phpmyadmin сделать индексы

зы. "всего 3 ляма" это не так уж и мало

Обалденный заработок на социальных сетях (https://goo.gl/Qtsq6M)
tmatm
На сайте с 22.04.2006
Online
218
#7

Вообще обычно проще делать запросы без join. Пусть будет не один запрос, а много, но зато много простых, выполняющихся за долю секунды, чем 1 запрос с join, выполняющийся 10 секунд. Так что советую забыть все эти join, как страшный сон и не использовать их.

Optimizator.Ru ( https://optimizator.ru/ ) — регистрация и продление доменов в RU-CENTER и REG.RU: RU, РФ от 123 р.; MSK.RU, SPB.RU и др. 168 р. + REG.RU ( https://reg.optimizator.ru/ ). Освобождающиеся домены от 150 р. ( https://optimizator.ru/backorder/ )
Andreyka
На сайте с 19.02.2005
Offline
822
#8

Идеальная БД для хайлоада - это одна таблица, в которой одним slect можно получить все данные.

Не стоит плодить сущности без необходимости
ValdisRu
На сайте с 02.10.2006
Offline
139
#9
Andreyka:
Идеальная БД для хайлоада - это одна таблица, в которой одним slect можно получить все данные.

подозреваю что у администраторов и программистов разные идеалы 😂

N
На сайте с 06.05.2007
Offline
419
#10

Для group by и прочих вариантов агрегации индексы не помогают вообще. Если смысл запроса "посчитать сумму всех", значит mysql будет считывать всех и суммировать.

Так что только переосмыслить, группировать данные как-то отдельно и так и хранить - называется предагрегация. Или денормализация, если вы выберете другой способ.

Кнопка вызова админа ()
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий