|
|
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Ребята, выручайте! Строк в таблице более 30000, найти связанных с ними нужно в 10 раз больше, при этом одна из найденных вообще ничего не должна содержать. Определяя последнее можно было бы сократить искомые строки в 6 раз, то есть до 5000. Делаю так: select doc.id, doc.pagetitle, pospages_h1.value pospages_h1, pospages_linkname.value pospages_linkname, pospages_name.value pospages_name, pospages_type.value pospages_type, pospages_shosse.value pospages_shosse, pospages_areas.value pospages_areas, pospages_regions.value pospages_regions, poselki.value poselki, pospages_naspunkt.value pospages_naspunkt from modx_site_content doc left join modx_site_tmplvar_contentvalues pospages_h1 on doc.id = pospages_h1.contentid and pospages_h1.tmplvarid = 184 left join modx_site_tmplvar_contentvalues pospages_linkname on doc.id = pospages_linkname.contentid and pospages_linkname.tmplvarid = 301 left join modx_site_tmplvar_contentvalues pospages_name on doc.id = pospages_name.contentid and pospages_name.tmplvarid = 186 left join modx_site_tmplvar_contentvalues pospages_type on doc.id = pospages_type.contentid and pospages_type.tmplvarid = 166 left join modx_site_tmplvar_contentvalues pospages_shosse on doc.id = pospages_shosse.contentid and pospages_shosse.tmplvarid = 170 left join modx_site_tmplvar_contentvalues pospages_areas on doc.id = pospages_areas.contentid and pospages_areas.tmplvarid = 167 left join modx_site_tmplvar_contentvalues pospages_regions on doc.id = pospages_regions.contentid and pospages_regions.tmplvarid = 168 left join modx_site_tmplvar_contentvalues poselki on doc.id = poselki.contentid and poselki.tmplvarid = 161 left join modx_site_tmplvar_contentvalues pospages_naspunkt on doc.id = pospages_naspunkt.contentid and pospages_naspunkt.tmplvarid = 413 where doc.parent = 3030 and doc.published = 1 and doc.deleted = 0 and pospages_naspunkt.value is null and doc.template = 39 Из этого должно быть ясно, что не нужны строки, связанные с таблицей с псевдонимом pospages_naspunkt при этом содержащие что либо. Пробовал not exists, но загрузка была бесконечная, я так и не дождался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 09:08 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Забыл привести статистику. Данный запрос обрабатывается за полторы секунды, что критично, так как и без того имеется 1 секунда на другие. Да, ещё мне нужно не отсеивать эти 25000 ресурсов и работать с этими данными, но я пока откладываю это из-да слишком затяжной обработки. Может я что- то делаю не так? Ведь выходит, что нужно дробить таблицы, а это критично при использовании modx. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 09:22 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Честно говоря трудно понять код не понимая задачу, а именно не видя исходные данные (таблицы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 09:30 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Cosmagnetto, Таблицы две используется, одна основа modx_site_content, вторая modx_site_tmplvar_contentvalues хранит параметры, связываемые со строками основной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 09:49 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Сергей СавельевСтрок в таблице более 30000, найти связанных с ними нужно в 10 раз больше, при этом одна из найденных вообще ничего не должна содержать. Определяя последнее можно было бы сократить искомые строки в 6 раз, то есть до 5000. Замечательный поток сознания ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 09:57 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
paver, Спасибо, искренне надеюсь на понимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 10:02 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Сергей Савельев, Я, кажется, сам начинаю догадываться. Нужно осуществить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 10:28 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Нужно разделить процесс на два этапа!) В первом искать эти 5000 строк из основной таблицы, после этого составлять такой же как и описанный выше запрос, но только вместо pospages_naspunkt.value is null указать doc.id in (список ранее найденных идентификаторов). Круто! Хотелось бы, конечно, в один запрос это всё вынести. Не подскажете как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 10:32 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Прочитал несколько раз... НХНП. PS. Нашёл тег спойлера - найди теперь ещё и тег кода. А заодно почитай про форматирование кода и алиасы таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 10:48 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Akina, А я прочитал несколько раз твой ник и у меня тоже НХНП) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 10:55 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
У меня с ником проблем нет. А у тебя с запросом - есть. И судя по желанию "разделить на два этапа" - и дальше будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 11:25 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Если сделать вот так: форматированный код Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. то сразу понимаешь, что нужно хотя бы переместить соединение с таблицей pospages_naspunkt ближе к началу, или даже её вместе с основной таблицей завернуть в подзапрос, если, как ты утверждаешь, по этому признаку селективность приличная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 11:33 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Кстати, нафига тебе в выходном наборе pospages_naspunkt.value, если согласно условию отбора оно строго is null? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 11:36 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Akinaеё вместе с основной таблицей завернуть в подзапрос Приведи, пожалуйста, пример. Akinaнафига тебе в выходном наборе pospages_naspunkt.value, если согласно условию отбора оно строго is null Говоря человеческим языком, нужно получить ресурсы без населённого пункта, которых всего 5000. Но, на самом деле, я решил эту проблему, за счёт двух этапов, теперь загрузка с полутора секунд снизилась до 200 миллисекунд, хотя я понимаю, что при использовании подзапроса есть вероятность свести её к минимуму. Вопрос сейчас стоит другой, как получить все 30000 ресурсов со всеми параметрами, в том числе и населённым пунктом, при этом не ожидая 2 секунды? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:09 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Akina, спасибо тебе, кстати, что, хотя бы, уделил столько времени моей безграмотности в подобных обстоятельствах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:11 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
AkinaКстати, нафига тебе в выходном наборе pospages_naspunkt.value, если согласно условию отбора оно строго is null? Не сразу догнал. Это программное формирование, я просто не дорабатывал класс, я формирую этот запрос за счёт строки: Код: php 1. Примерное его содержание можно представить, но, если интересно, могу опубликовать код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:15 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Сергей СавельевПриведи, пожалуйста, пример. Попробуй вот такие тексты: перенос Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. подзапрос Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:36 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Сергей Савельевесли интересно, могу опубликовать кодНет, неинтересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:37 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Akina, Доходчиво, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 15:40 |
|
||
|
Ускорение left join
|
|||
|---|---|---|---|
|
#18+
Сергей СавельевНужно разделить процесс на два этапа!) В первом искать эти 5000 строк из основной таблицы, после этого составлять ? зачем вам 5 тысяч строк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2016, 22:30 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39349195&tid=1831192]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
180ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 509ms |

| 0 / 0 |
