|
|
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Наполнил таблицу и в ней 2500 записей. Теперь когда пытаю чтото выбрать чувствуюется реально задержка по времени. Так это всего 2500 записей, а если будет 10000 к примеру, что нужно будет ждать по несколько минут. Сайт на джумле и вот мой запрос на выборку Код: plsql 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. Здесь я выбираю 10 записей, начиная с 100, это своего рода пагинация. Прошу совета, правильно ли составлен запрос, может я чтото не так выбираю. И если неправильно поправьте пожалуйста. Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 01:59:20 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
paha4444, во-первых, за такое Код: plsql 1. 2. 3. 4. 5. 6. надо сразу отправлять изучать основы скл. Во-вторых, что показывает explain запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 06:08:34 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
SELECT ads.id, куча_полей_не_под_агрегатными_функциями Как это понять?, этот способ выборки мне советовали тоже на форуме. Основы я изучал. Вот что показал EXPLAIN Напишите пожалуйста пример, как мне выбирать данные. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 11:27:37 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
paha4444SELECT ads.id, куча_полей_не_под_агрегатными_функциями Как это понять?, этот способ выборки мне советовали тоже на форуме. Основы я изучал. хрена хто такое советовал ! акстись ! - 14684048 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 11:32:26 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
paha4444этот способ выборки мне советовали тоже на форумеНе всему можно верить. Ну или вы вообще исходный совет неправильно поняли. paha4444Основы я изучал.Отлично, тогда вам не составит труда показать результат работы вот такого запроса Код: sql 1. на таких данныхab122324, а также объяснить, почему он получается именно таким. А лучше всего - включите only_full_group_by и медитируйте над выдаваемой ошибкой до просветления :) А касательно эксплейна (отдельное спасибо за рисунок, к тому же неподгружающийся, вместо текста) - таблица image_ads цепляется без индекса, отсюда и тормоза. Индекс в ней на id_ads есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 11:39:02 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Пожалуйста, обломайте мне руки вот за такое: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Оно почему-то (хз почему, но - ) работает Я понимаю, что берется первый элемент группы, но - группа предварительно явно отсортирована, а оптимизатору будет лениво (ятд) использовать какой-то другой порядок выборки - так что вроде бы всегда будет правильно? И никаких MAX не надо? То есть это аналог действий оптимизатора по нахождению MAX, но как бонус - сразу извлекающий всю строку? Или я чего-то не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 11:49:19 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
забыл тестовые данные... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 11:55:46 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
tanglirpaha4444этот способ выборки мне советовали тоже на форумеНе всему можно верить. Ну или вы вообще исходный совет неправильно поняли. Может быть. paha4444Основы я изучал.Отлично, тогда вам не составит труда показать результат работы вот такого запроса Код: sql 1. на таких данныхab122324, Выбрать поле a,b из таблицы thetable группировать по полю a а также объяснить, почему он получается именно таким. А лучше всего - включите only_full_group_by и медитируйте над выдаваемой ошибкой до просветления :) А касательно эксплейна (отдельное спасибо за рисунок, к тому же неподгружающийся, вместо текста) - таблица image_ads цепляется без индекса, отсюда и тормоза. Индекс в ней на id_ads есть? Я нажал тут на вставить изображение, вроде бы тег добавился, вобщем вот рисунок http://pixs.ru/showimage/2013081110_1280431_8712247.png image_ads цепляется без индекса, отсюда и тормоза. Индекс в ней на id_ads есть? нет, индекса нет, сейчас попробую добавить индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 12:51:29 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Добавил индекс сейчас все круто!!!! Спасибо огромное!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 13:05:13 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
paha4444Добавил индекс сейчас все круто!!!! Спасибо огромное!!! Еще вопрос. А можно добавить индекс каждой таблице, где привязка по ID? Это будет без болезненно и производительно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 13:09:06 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
paha4444paha4444Добавил индекс сейчас все круто!!!! Спасибо огромное!!! Еще вопрос. А можно добавить индекс каждой таблице, где привязка по ID? Это будет без болезненно и производительно? В обшем виде -- нужный индекс дает большие преимушества. Ненужный индекс имеет небольшое отрицательное влияние. Индекс, обычно, нужен во всех местах где идет связка по ФК-ПК -- в частности "привязка по ИД" как вы сказали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 17:31:52 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Вот смотрите. У меня идут таблицы: Объявления Изображения к ним(пути к файлам) Страна Регионы Области Тут везде идет привязка по ID. В таблице с объявлениями в некоторых полях у меня храняться ID из других таблиц. Сейчас у меня индекс есть в таблице с Изображениями в поле id_ads(id объявления) Я вот думаю может добавить индекс в каждую табличку и в табличку с объявлениями на поле id Как считаете? Но сейчас работает все молнейносно, токо отправляеться запрос сразу же получаю ответ. Круто!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 18:43:22 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
paha4444, одна из мантр баз данных -- надо индекс на каждую связку. Однако если все работает достаточно для вас быстро -- полезнее занятся следуюший задачей....(или пивом учитывая выходные). и вернутся к оптимизации когда что-то будет работать медлено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 21:04:15 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Cygapb-007Или я чего-то не понимаю?Именно. Есть стандарт. Написанное тобой по нему - ересь. Есть реализованные в конкретном языке расширения и отступления от стандарта. Они либо документированы либо нет. Твой случай - это когда НЕ документированы. Значит, то, что у тебя получается ожидаемый тобой результат - негарантировано, обычная случайность. Повод обломать руки - есть... подставляй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2013, 23:44:34 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
AkinaCygapb-007Или я чего-то не понимаю?Именно. Есть стандарт. Написанное тобой по нему - ересь. Есть реализованные в конкретном языке расширения и отступления от стандарта. Они либо документированы либо нет. Твой случай - это когда НЕ документированы. Значит, то, что у тебя получается ожидаемый тобой результат - негарантировано, обычная случайность. Повод обломать руки - есть... подставляй.Именно:) Про стандарт я в курсе, однако в MS SQL до сих пор без проблем работает "хитрый" update table @var+=field (который нигде не документирован) - может и здесь та же фигня? Пока не опроверг - рук не подставлю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 09:26:53 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
[quot Akina]Cygapb-007Значит, то, что у тебя получается ожидаемый тобой результат - негарантировано, обычная случайность. .Уточняю - жду пример, когда результат отличается от ожидаемого :) Или описания ситуации, когда MySQL пересортирует вложенный (и уже явным образом отсортированный) запрос при построении группировки по полю. А кивать на общий стандарт SQL применительно к конкретному языку - по-моему, не совсем корректно (тот же MS SQL просто выдаст синтаксическую ошибку, да и MySQL тоже, если включить ONLY_FULL_GROUP_BY ) PS. Например, для MS SQL - был приведен запрос, когда select * from MyTable выдавал записи в произвольном (каждый раз разном) порядке даже при наличии кластерного первичного ключа :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 09:41:29 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
И еще одно возражение...AkinaТвой случай - это когда НЕ документированы.А как же 12.15.3. MySQL Extensions to GROUP BY ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 09:59:22 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Так все же, резюмируя, - можно пользоваться таким ( 14693070 ) приемом при поиске последнего комментария, или возможны ситуации (например, с распараллеливанием выполнения запроса), когда по GROUP BY будет выбрано не максимальное для группы значение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 11:26:06 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, У вас там "косяк" в том, что предварительную сортировку в подзапросе Вы делаете по DESC, а группировка в Мускуле "по умолчанию", и внезапно - делает ASC. Соответственно, думаю можно подобрать ТАКИЕ наборы данных, для которых внутренняя предварительная группировка 0 неэффективна и послоедующий групбай - перевесит вашу явную сортировку напрочь. Так что, даже если "в целом" запрос "практически" работает - за такое, я бы ручки точно от разработки реальных проектов отлучил "не задумываясь", но... не переживайте. Здесь таких "гуру" - каждый третий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 12:08:04 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
tanglir, нет там особых проблем с "неподагрегатными" функциями. В отличие от предыдущего "автора", тут идет явное разворачивание данных по одной базовой таблице и записи множиться явно - не намерены. Можно и без агрегатов в таком случае... но, если оно действительно так - то есть автор способен гарантировать единичность выборок левых джойнов. ... а про индексы - тут уже прошлись и без меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 12:10:51 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Arhat109Cygapb-007, У вас там "косяк" в том, что предварительную сортировку в подзапросе Вы делаете по DESC, а группировка в Мускуле "по умолчанию", и внезапно - делает ASC. Соответственно, думаю можно подобрать ТАКИЕ наборы данных, для которых внутренняя предварительная группировка 0 неэффективна и последующий групбай - перевесит вашу явную сортировку напрочь. Так что, даже если "в целом" запрос "практически" работает - за такое, я бы ручки точно от разработки реальных проектов отлучил "не задумываясь", но... не переживайте. Здесь таких "гуру" - каждый третий.Хохма в том, что серверу не нужно сортировать по id_message , достаточно отсортировать по id_user . То есть на вход сортировки поступает последовательность записей, сортировщик начинает сортировать ее по полю id_user - но по этому полю последовательность уже отсортирована, поэтому никаких дополнительных перемещений записей во входном наборе вроде бы не ожидается (иначе это увеличило бы стоимость плана выполнения)... Да, я согласен с тем, что http://dev.mysql.com/doc/refman/5.5/en/group-by-extensions.html You can use this feature to get better performance by avoiding unnecessary column sorting and grouping. However, this is useful primarily when all values in each nonaggregated column not named in the GROUP BY are the same for each group . The server is free to choose any value from each group , so unless they are the same, the values chosen are indeterminate.но не вижу причин, побудивших бы его реально выполнить пересортировку поступающих данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 12:23:38 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, Вся "хохма" в том, что вы так и не поняли, что выборка значений без агрегатов происходит ДО этапа сортировки и группировки. Это раз. И второе то, что этап группировки у Мускуля - производит сортировку "на лету"... что в сочетании с "произвольностью выборки" сервером - приводит к практически гарантированно неопределенному выполнению запроса. Обычно, именно за это - ручки и обрывают. Не от вашего "бренного тельца"... от проектов конечно же... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 12:31:18 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Arhat109Cygapb-007, Вся "хохма" в том, что вы так и не поняли, что выборка значений без агрегатов происходит ДО этапа сортировки и группировки. Это раз. И второе то, что этап группировки у Мускуля - производит сортировку "на лету"... что в сочетании с "произвольностью выборки" сервером - приводит к практически гарантированно неопределенному выполнению запроса. Обычно, именно за это - ручки и обрывают. Не от вашего "бренного тельца"... от проектов конечно же...Вы хотите сказать, что в результате выполнения практически гарантированно получатся неверные результаты?? Ситуация прямо противоположная - практически (не теоретически!) гарантированно результаты будут ожидаемыми ! Я как раз хочу понять, в каких ситуациях в принципе возможны неверные результаты (а не кричать "аллилуйя" и "ересь") Я согласен, что сервер вправе самостоятельно выбрать, данные из какой конкретной строки группы выбрать в качестве результата, но не вижу причин "утяжелять" план выполнения и брать их не из первой же строки группы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 12:43:31 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, У вас верные результаты, только благодаря тому что порядок следования записей в таблице совпадает с указанными сортировками. "Так получилось". По удаляете и повставляйте записи "туда-сюда" в случайном порядке нумерации и поедет ваш результат "к бабушке". Оттого что вы указали первую сортировку ASC, а вторую DESC - нисколько её не отменяет. Отменить её может только отсутствие записей с одинаковым первым ключом... и только. Как только появятся записи в сортировке DESC, и как только они будут реально лежать в порядке ASC в файле таблички - пойдёт оно всё лесом... Вы никак понять не можете, что выбор из какой записи реально взять не агрегированное поле - действительно всегда будет "из первой попавшейся"... и вот когда "первой попавшейся" (в файле таблички) окажется "не та запись", ваш запрос рухнет, и никому ничего даже не вякнет... больше того, далеко не всегда "потом" удается заставить такое работать, даже прибивая "нужные индексы" гвоздями... то есть, по сути, вы сознательно оставляете после себя минное поле, на котором ваш код будет скользить и хорошо, если у вас а не у того кто придёт после... собственно, не принимайте "близко к сердцу"... теперь это нормальный способ сделать себя "незаменимым". Я уже это вижу достаточно часто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 12:53:29 |
|
||
|
Нужен совет от гуру
|
|||
|---|---|---|---|
|
#18+
Arhat109Можно и без агрегатов в таком случае... но, если оно действительно так - то есть автор сопсобен гарантировать единичность выборок левых джойнов.Загвоздка в том, что автор об этом не знал (ну... я уверен, что он об этом не знал :)). Т.е. гарантировать-то, наверное, мог, и так делать в этом конкретном случае действительно было бы можно, но он же ж потом стал бы такое и дальше лепить, пока рано или поздно на эти грабли бы не наступил. Так что я решил его заранее предупредить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2013, 12:54:04 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38362915&tid=1836264]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 345ms |

| 0 / 0 |
