|
|
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Есть таблицы news – 80 тысяч записей и rels – 40 миллионов записей и есть такой запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Выполняется по минуте и дольше. Как можно оптимизировать запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2016, 23:31 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Ольга Семенова, На будущее - показывайте сами запросы, а не код, который их генерит. Для этого соберите их в переменную, а уже это переменную выводите для отладки и её же передавайте на выполнение в MySQL. Второе - выясните, какой именно из двух запросов тормозит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2016, 01:12 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
Ольга СеменоваЕсть таблицы news – 80 тысяч записей и rels – 40 миллионов записей и есть такой запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Выполняется по минуте и дольше. Как можно оптимизировать запрос? а зачем left join ? типо если запись в релс есть, но новость уже удалена, вам это нужно в ответе? ======= explain - покажет как выполняется запрос. должно быть чтото типо релс - использует индес по полю news_id, ньюс - по полю айди тоесть по одному индексу из 40млн ищем нужные строки, по другому для нужных строк новости. а мне вот интерестно 80 тысяч новостей, 40млн связей с похожими, ясен перец если новость один похожа на два, то два тоже похожа на один. итого 20млн уникальных связей. это на одну новость 250 похожие??? сомневаюсь что человек в ручную назначает новости похожими... я вот к чему виду. зачем табилца релс если эти данные точечно не редактируются. храните вместе с новостью в текстовом поле список айдишников похожих через запятую. надо добавить новую новость, и обновить у 250 список похожих. напишете чтото вроде(новая новость айди = 1111 Код: sql 1. 2. если список похожих пуст, то новое значение 1111, иначе если уже этот айди есть в строке(на всяк пожарный) то новое значение равно старое, иначе новое равно новому с пририсованым айди через запятую и этот список через айди потом использовать для поиска похожих новостей либо просто подставить в кунструкцию IN() либо, если всётаки хочется перестраховатся от иньекций, проверить его на регулярку /^(?:\s*\d+\s*,?)*$/ - пробелов там не должно быть, но если мы уж боимся иньекций и подразумеваем сторонее изменение строки, то пробелы могут и быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2016, 01:19 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
miksoftОльга Семенова, На будущее - показывайте сами запросы, а не код, который их генерит. Для этого соберите их в переменную, а уже это переменную выводите для отладки и её же передавайте на выполнение в MySQL. Второе - выясните, какой именно из двух запросов тормозит. дык а если бы тормозил первый, то второй автоматически. или есть варианты :) ==== не спится? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2016, 01:20 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
alex564657498765453дык а если бы тормозил первый, то второй автоматически. или есть варианты :)Варианты есть. Правда, маловероятные. alex564657498765453эти данные точечно не редактируются.Это откуда такое вытекает? alex564657498765453не спится? :)Видимо, уже сплю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2016, 02:42 |
|
||
|
Оптимизировать запрос
|
|||
|---|---|---|---|
|
#18+
miksoft, исходя из того что сейчас на одну новость 250 похожих всреднем. тоесть при добавлении очередной новости, ей надо вписать список айдишников гдето 250, а для 250 новостей добавить одну похожую. если процесс ручной-интерактивный, то можно предположить что человеку долго ждать такого апдейта (хотя аджаксом можно 250 апдейтов по одному делать) - и не хотим денормализацию. но процесс скорей всего автоматический - так что пусть хоть 10 минут или 30 минут идёт добавление утрених новых новостей - фоновый процес подождёт, чай терпение не кончится, зато человек будет получать новость с похожими быстрее. == или я не понял сути твоего сомнения!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2016, 08:48 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1831484]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
9ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 509ms |

| 0 / 0 |
