|
|
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Вот запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. Вот план: id select_type table type possible_keys key key_len ref rows Extra ------------------------------------------------------------------------------------------------------------------------------------- 1 SIMPLE k-ts ref PRIMARY,f f 1 const 35187 Using temporary; Using filesort 1 SIMPLE k-t_s ref id_s id_s 4 webart_200slov.k-ts.ids 112 Using index Вот дамп: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Подскажите, как сделать этот запрос быстрее. Сейчас по минуте выполняется. В `k-ts` 70 000 записей. В `k-t_s` 5 000 000 записей (связи). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 18:03:18 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 18:12:49 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Индексы используются правильные. Вопрос в том, как избавится от временной таблицы... Попробуй так: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 18:17:44 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
SELECT `k-t_s`.`id_s`, `k-ts`.`s` slovo, count( `k-t_s`.`ids` ) kol FROM `k-t_s` JOIN `k-ts` ON `k-t_s`.`id_s` = `k-ts`.`ids` WHERE `k-ts`.`f` =0 GROUP BY 1 ORDER BY 3 LIMIT 1 Может прокатить, т.к. обрабатываются только поля из выборки. Но много зависит от версии мускула. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 18:19:48 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
mikhalkenSELECT `k-t_s`.`id_s`, `k-ts`.`s` slovo, count( `k-t_s`.`ids` ) kol FROM `k-t_s` JOIN `k-ts` ON `k-t_s`.`id_s` = `k-ts`.`ids` WHERE `k-ts`.`f` =0 GROUP BY 1 ORDER BY 3 LIMIT 1 Может прокатить, т.к. обрабатываются только поля из выборки. Но много зависит от версии мускула. Вот эти строки мне не понятны — Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 18:44:51 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
andrejk, 1. сильно ускорить можно денормализацией каунта на родительскую таблицу -- или тригерами для реал-тайма или регулярным пересчетом с допустимым интервалом задержки 2. фаилсорт -- это индикация сорта -- не обязательно на диске. Тут интересно посмотреть если диск задейсвован или все в памяти? В течении минуты, вы реально слышите диск? лампочка диска мигает? если на удаленке, то посмотрите iostat, top, mytop. Если будет наблюдатся дисковая активность -- попробуйте 3. увеличить РАМ и сорт-буффер (или как он там называется?) 4. убрать из запроса SELECT `k-ts`.`s` slovo, и заменить его на Код: sql 1. 2. 3. 4. 5. и подсоединить конкретное СЛОВО после выборки ЛИМИТ 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 19:10:17 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Всё происходит на хостинге, я не могу знать про загрузку диска. Но техподдержка говорила, что всё это время (минуту) в память копировалась какая-то таблица, из которой потом была выборка. Странно ещё и то, что день-два потормозит, потом неделю всё нормально, запросы по 10 секунд, а потом опять по минуте и более. Вот этот феномен как получается? Может подскажете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 20:12:57 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Сделал так: Код: sql 1. 2. 3. 4. 5. 6. 7. Но как теперь присоединить слово после LIMIT 1 не знаю. Я не силён особо в SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 21:43:43 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
andrejkСделал так: Код: sql 1. 2. 3. 4. 5. 6. 7. Но как теперь присоединить слово после LIMIT 1 не знаю. Я не силён особо в SQL. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. еще раз, зачем это делается: для разгрузки промежуточной таблицы и попытка избежать вываливание процесса на диск ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 22:16:19 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
WHERE TS.`f` = 0 должно быть WHERE TS1.`f` = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 22:17:53 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
и во второй строчке алиас поправил: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 22:19:33 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
andrejkВсё происходит на хостинге, я не могу знать про загрузку диска. Но техподдержка говорила, что всё это время (минуту) в память копировалась какая-то таблица, из которой потом была выборка. Странно ещё и то, что день-два потормозит, потом неделю всё нормально, запросы по 10 секунд, а потом опять по минуте и более. Вот этот феномен как получается? Может подскажете? Это легко -- шаред хостинг иногда загружен другими пользователями -- иногда нет. Ваш сервер в целом иногда загружен, иногда нет -- например если там еше ваш веб сервер крутится. Загрузка ЦПУ, РАМ, диск И/О с задержками. Реально лечится или на логическом уровне денормализацией, или на админовском уровне подгонкой сервера -- что трудно на шаред сервере. Или переходить на выделеный сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 22:25:14 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Посоветуете что-нибудь по денормализации? Основы на пальцах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 22:38:05 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
andrejk, на пальцах идея простая: Вместо того чтоб считать каждый раз каунт K-T_S для каждой записи TS -- иметь это значение напрямую в TS. Например есть родитель ПОКУПКА и детишки в ЛИНИЯ_ЧЕКА сумму по чеку записать (денормализовать) в таблицу ПОКУПКА, хотя это значение есть сумма из всех дочерних записей в таблицы ЛИНИЯ_ЧЕКА. Эта денормализация называется "наверх" (upstream denormalization) ибо нормализованые значения в детишках денормализуются "наверх" в родительские записи. Теперь по реализации. Если надо абсолютно сразу иметь иметь информацию, то можно сделать на клиентском калбеке иили на тригерах самой базы: про вставлении новой записи в K-T-S, немендлено пересчитать каунт в TS. Если трансакции не частые и пользователь разрешит выдавать ему значение с задержкой, то можно пересчитывать новые поступления раз час, или раз в день -- это вместо тригера. В вашем случае денормализация полность ислючит необходимость подсоединять и считать таблицу K-T-S и результат будет в районе долей милисекунды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 01:10:09 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
andrejk, делай group by по полю s, а не по ids. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 09:17:34 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, да и вообще, странный запрос.... можешь объяснить, что же он должен выдавать? потом, сколько записей нужно в итоге просуммировать? сколько записей во всех таблицах и сколько попадать под условие в where? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 09:22:31 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Запрос выдаёт слова и их число повторений в таблице связей в порядке убивания по числу повторений. Короче, самые популярные слова выдаёт. Слов 70 000, связей 5 000 000, я это уже писал вначале. Из слов составлены наборы, которые определяются связями. Наборов 320 000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 12:19:23 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
javajdbcandrejk, на пальцах идея простая: Вместо того чтоб считать каждый раз каунт K-T_S для каждой записи TS -- иметь это значение напрямую в TS. Например есть родитель ПОКУПКА и детишки в ЛИНИЯ_ЧЕКА сумму по чеку записать (денормализовать) в таблицу ПОКУПКА, хотя это значение есть сумма из всех дочерних записей в таблицы ЛИНИЯ_ЧЕКА. Эта денормализация называется "наверх" (upstream denormalization) ибо нормализованые значения в детишках денормализуются "наверх" в родительские записи. Теперь по реализации. Если надо абсолютно сразу иметь иметь информацию, то можно сделать на клиентском калбеке иили на тригерах самой базы: про вставлении новой записи в K-T-S, немендлено пересчитать каунт в TS. Если трансакции не частые и пользователь разрешит выдавать ему значение с задержкой, то можно пересчитывать новые поступления раз час, или раз в день -- это вместо тригера. В вашем случае денормализация полность ислючит необходимость подсоединять и считать таблицу K-T-S и результат будет в районе долей милисекунды. Я тоже уже подумал про дополнительное поле с числом вхождений слов в таблице связей (в наборах). Думаю, что этот вариант лучше всего подойдёт. Этот запрос нужен только для перевода самых популярных слов, поэтому пересчёт можно делать даже раз в день, т.к. небольшое изменение ситуации не принципиально. Блин, а можно как-то без ПХП всё посчитать и записать в дополнительный столбец? не выходя их мускля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 12:23:41 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
andrejkа можно как-то без ПХП всё посчитать и записать в дополнительный столбец?Можно. Более того, нужно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 12:30:21 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Это даже получается, можно трригер написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 12:40:56 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Мне нужна с этим помощь. Я понимаю, как выбрать что-то, если знаем что, но как циклично выбрать и посчитать, да ещё записать всё подряд не умею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 12:44:51 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
andrejkМне нужна с этим помощь. Я понимаю, как выбрать что-то, если знаем что, но как циклично выбрать и посчитать, да ещё записать всё подряд не умею. Сначала делаешь поле и делаешь его UPdate , посчитав соотв. кол-во слов (это будет долго, и до конца операции нельзя использовать БД пользователями). Потом пишешь триггер (пишешь -то конечно заранее, в этот момент только заливаешь), который по вставке нового слова увеличивает соотв. счётчик, по удалению -- уменьшает, по изменению -- и уменьшает новое, и увеличивает старое. (это конечно будет три триггера). Заливаешь его -- и можно пускать пользователей. Дальше оно всё само будет считаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 12:54:24 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Общую логику я соображу. Мне бы синтаксис, примерчик запросика, чтобы всё посчитать и занести в столбец, который я уже создал) Единственное, как его URDATE сделать? Я думал, достаточно просто создать столбец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 12:59:07 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Ну вот число посчитать могу, а как эти данные занести теперь в дополнительный столбец `k-ts`.`kol`, где `k-t_s`.`id_s` соответствует `k-ts`.`ids`? Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 14:02:34 |
|
||
|
Медленный запрос. Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Пришлось и полез. ... Мне самому хочется разобраться в пределах своего сайта. Я хочу знать свой сайт, т. е. сам его сделать. Так получилось, что вышло всё не так просто, как предполагалось. И почему я что-то должет в этом плане объяснять? Вы что, привыкли, что тут одни лодыри сидят, которые хотят, чтоб за них писали? Посмотрите мои темы, я часто выкладываю решение, даже если сам догадался, вдруг кому поможет. А вы, (тоже мужчина, наверное?), вместо того, чтобы умничать, лучше бы подсказали, про какие возможности sql почитать, если пример дать принципы не позволяют, а то знаете, как-то непонятно, что искать, когда не знаешь, что искать. Я учусь только на своём сайте и только по мере необходимости. Ну так, подскажете, про что почитать? Мне нужно одним запросом посчитать и записать в новый столбец результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 14:57:16 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38787741&tid=1834013]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 385ms |

| 0 / 0 |
