#0
by DirecTwiX
В очередной раз пытаюсь оптимизировать запрос, наткнулся на странную вещь. Немного поэкспериментировав, получил такой запрос: В профайлинге: И если увеличивать внутренний лимит до 10+млн, фаза Sending data растягивается на 5 минут. О какой передаче данных идёт речь? Если выбирать из таблицы напрямую, то фаза эта будет занимать считанные доли секунд.
#4
by Fragster
тут вот пишут, что сендинг дата - это время от начала выполнения до передачи последней строки, т.е. не только передача, но и выполнение щапроса
#6
by DirecTwiX
Что это? Запрос тестовый - разбирался откуда берётся Sending data. В последнем предложении указал, что делал и без внутреннего селекта (т.е. это очевидно, что можно и без него)
#8
by DirecTwiX
Есть же Executing.. Да и без внутреннего запроса Sending data вообще исчезает (сейчас проверил)
#11
by Fragster
вот, например: EXPLAIN SELECT score, distance, date, nickname FROM ( SELECT score, distance, date, nickname FROM jsgleest_results ORDER BY id DESC LIMIT 1000 ) AS innerSelect ORDER BY score DESC LIMIT 10 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 1000 Using filesort 2 DERIVED jsgleest_results ALL NULL NULL NULL NULL 13283 Using filesort против EXPLAIN SELECT score, distance, date, nickname FROM ( SELECT score, distance, date, nickname FROM jsgleest_results WHERE id > ( SELECT Count( * ) -1000 FROM jsgleest_results ) ) AS innerSelect ORDER BY score DESC LIMIT 10 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 1016 Using filesort 2 DERIVED jsgleest_results ALL PRIMARY NULL NULL NULL 13283 Using where 3 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away в первом случае - читается вся таблица, сортируется и уже из результатов выбирается 1000 первых, из них - выбирается 10 по другому условию. во втором - получается 1000 по первичному ключу, что на большом количестве данных быстрее
#15
by Fragster
просто запрос из лишен смысла - он у тебя равнозначен SELECT owner_id FROM audio LIMIT 10 только без индекса
#19
by DirecTwiX
Выполнение запроса - это Executing (сендинг дата нет в прямом запросе) Нет, все разные (строки разные, но owner_id есть одинаковые. Но суть опять же в сендинг дата)
#20
by Fragster
.1 еще раз. в твоем случае - это чтение 16 мегастрок для последующего запроса. Так понятнее?
#22
by DirecTwiX
Если это чтение, то понятно) Спасибо Ахаха Что грусть то (кроме твоей логики(? Как вообще МГУ и мускуль связаны?
#23
by Fragster
да у тебя все ветки одинаковые, и при этом одинаково странные с одинаково малосмысленными запросами
#24
by DirecTwiX
Ветки одинаковые только из-за наличия скуля? Везде разные вопросы. А запрос я однажды выкладывал полный - помощи ноль было - поэтому приходится всё по частям разбирать
#25
by Fragster
нет, ветки одинаковые из-за того, что у тебя все время запрос селект фром (селект лимит 100500) лимит 1.
#26
by DirecTwiX
Бред. Тогда мне это нужно было, чтобы всю таблицу не тянуть и не ждать. Сейчас я разбирался почему внутренний селлект даёт сендинг дата
#27
by Fragster
ты так ни разу и не сформулировал целиком, что ты хочешь получить, сразу лепишь селекты...
#29
by Fragster
ты хоть раз объяснил, зачем тебе лимит во внутреннем запросе? зачем там вообще внутренний запрос?
#30
by DirecTwiX
Только там в правильный запрос. Без внутреннего селекта у меня это дело во временную таблицу не помещается, и мускуль это всё на диск кидает. А ждать концы такого запроса не имеет смысла.
#32
by Fragster
вот это? SELECT A, COUNT(*) AS Cnt FROM (SELECT A FROM tbl WHERE owner_id IN (SELECT DISTINCT owner_id FROM tbl WHERE A=:A) ) a GROUP BY A ORDER BY Cnt DESC LIMIT 10
#33
by DirecTwiX
Да, это самый главный запрос. До чего я дошёл - прикрутить хеш-множество в ущерб точности и скорости добавления/удаления. Но пока не сдаюсь)
#34
by Fragster
а почему не так? SELECT A, COUNT(*) AS Cnt FROM tbl WHERE owner_id IN (SELECT DISTINCT owner_id FROM tbl WHERE A=:A) GROUP BY A ORDER BY Cnt DESC LIMIT 10
#35
by DirecTwiX
Внутренний запрос нужен был для LIMIT. В его забыл. А LIMIT нужен потому, что запрос выполняется больше 10 минут
#37
by DirecTwiX
А что он может нового вывести? Таблица на 16 млн строк. Ясен пень, что в оперативки не поместится для группировке, приходится на диск депить. Отсюда и время
#48
by DirecTwiX
Да, но только через джоин. Не сказал бы, что 20 секунд это победа - дальше база расти будет
#51
by Fragster
я вот не пойму, ты стесняешься, или думаешь, что твой запрос без данных кому-то нужен?
#52
by DirecTwiX
Int [1c]SELECT a.artist_id, a.title_id, count(*) count FROM audio a JOIN (SELECT DISTINCT owner_id FROM audio ".$whereClause.") owners ON owners.owner_id = a.owner_id GROUP BY a.artist_id, a.title_id LIMIT 100; [/1c]b Where artist_id = 234
#54
by Fragster
SELECT a.artist_id, a.title_id, count(*) count FROM audio a INNER JOIN audio b owners ON owners.owner_id = a.owner_id AND owners.artist_id = 234 GROUP BY a.artist_id, a.title_id
#63
by Fragster
рваный в том смысле, что клеится из кусочков, вместо использования PDO:PreparedStatement как в в сообщении Это заставляет много думать про фильтрацию входных данных, т.е. тех кусочков, из которых сам запрос клеится. ну так что, получше стало?
#66
by DirecTwiX
В yii тоже можно собирать запрос. Но т.к. у меня запросы примитивные, я даже не стал вдаваться в подробности. Лучше особо не стало, разве только explain получше стал. Да и запрос) Возьму себе) Спасибо) Колонок 6, все инты
#68
by DirecTwiX
И всё-таки оказался косячным. Там не учитывается условие DISTINCT owners_id, и строки задваиваются
#71
by DirecTwiX
Field Type Null Key Default Extra id int NO PRI NULL auto_increment artist_id int NO MUL NULL title_id int NO MUL NULL aid int NO NULL owner_id int NO MUL NULL duration int NO NULL Table Non_uni Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment audio 0 PRIMARY 1 id A 15952265 NULL NULL BTREE audio 1 art_tit_index 1 artist_id A 1227097 NULL NULL BTREE audio 1 art_tit_index 2 title_id A 3988066 NULL NULL BTREE audio 1 title_id 1 title_id A 2658710 NULL NULL BTREE audio 1 owner_id 1 owner_id A 60886 NULL NULL BTREE
#72
by DirecTwiX
Field Type Null Key Default Extra id int NO PRI NULL auto_increment artist_id int NO MUL NULL title_id int NO MUL NULL aid int NO NULL owner_id int NO MUL NULL duration int NO NULL ANALYZE TABLE audio = Table is already up to date Спасибо за участие!) Пока решил резать число владельцев - получается вполне сносно. Дальше буду ещё думать)
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- из-под 1С принтер "долго думает"
- Добавление реквизита в большом справочнике - долго!
- Подрядчик по сети долго работает
- Долго выполняется запрос, вызванный web-сервисом
- v7: долго открывается база, закрываются журналы. долго висит 1cv7.exe.
- 1sqlite долго выполняется запрос по остаткам
- 1С-> MySql Как получить ID вновь вставленной записи в MySQL?
- ЗУП 3.0 Долго открывает документы. Да и вообще долго работает
- Запрос по оборотам Хозрасчетный выполняется долго
В этой группе 1С
- Тип Отбор - ввод по строке (АвтоПодборТекста(), ОкончаниеВводаТекста())
- УФ: программно обратиться к свойствам командной панели для табличной части
- Изменение данных справочника в дереве значений
- Не срабатывает установка фиксированных настроек в СКД
- Перестали корректно работать регламентные задания MS Server 2012
- Как "отключить" план обмена по условию?
- Обмен между конфами УТ+Розница (обе для Украины)
- Ведомость взаиморасчетов с контрагентами УПП
- Для УТ11 нужны печатные формы мх-1 и мх-3
- Как можно сохранить макет СКД?
- Как удалить записи пер. Рег. Сведений у которого Измерение: <Объект не найден> ?
- СКД группировка максимум, затем сумма
- УФ почему то некоторые формы объектов 1с открывает модально, другие нет
- БлокировкаДанных. Метод ИспользоватьИзИсточникаДанных
- недостаточно свободной памяти на сервере 1с предприятия
- v7: Как вывести в виде выпадающего списка названия листов Excel
- Запись в регистр без проведения документа
- Запретить редактирование списка баз
- УТ11 и драйвера на весы
- ТЗ для планов обмена