|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
glamisSergey Sizov, Мне теперь для каждой выборки строить свои индексы? Можете построить чужие. Вам решать что для вас важнее - скорость работы программы, место на диске или ваша лень.В таблице около 30 полей и что, по каждому строить индекс? Стандартный идиотский вопрос... Откуда взялось слов "все"? Вроде я показал, что индексы нужны по выражениям в предложении where? Если нет, то откуда "все"? К тому же, индексы именно для ускорения выполнения запросов и создаются, а не "абы были". И под конкретные запросы, а не абы какие. Под предложенный вами запрос нужны такие.Насчет кеширования - только что сбросил таблицу по сетке на другой ресурс, с другим именем и сделал выборку в другой сессии fox - МГНОВЕННО.Из чего можно сделать вывод, что дело, скорее всего не в бобине. Как минимум не в кэшировании. Проверяйте остальное окружение. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 15:57 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
Sergey SizovСударь, вы думаете я это в текстовом редакторе написал? Вам показать код, который выводит сие сообщение? Извольте. ... Потом расскажете про использование только одного индекса. "На заборе тоже написано, а забором нету!" (с) Я утверждаю что "Rushmore optimization level for intermediate result: full" не означает "Найдено наилучшее решение". При некоторых обстоятельствах решение может оказаться наихудшим. Я однажды наступал на подобные грабли, запрос был похожий Код: sql 1.
таблица открыта локально, монопольно, записей прядка 100+ млн. индексы были оба по f1 и f2, но в один прекрасный день этот запрос завесил проц на 100% и завершения я не дождался. Последующие проверки зависание повторяли, переиндексация не помогала. Помогла смена индекса на str(f1) + str(f2) PS Пища для размышлений: почему MS SQL никогда не использует два индекса? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 16:13 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
Dima TSergey SizovСударь, вы думаете я это в текстовом редакторе написал? Вам показать код, который выводит сие сообщение? Извольте. ... Потом расскажете про использование только одного индекса. "На заборе тоже написано, а забором нету!" (с) Я утверждаю что "Rushmore optimization level for intermediate result: full" не означает "Найдено наилучшее решение". При некоторых обстоятельствах решение может оказаться наихудшим.Угу. Например, на маленькой таблице, где накладные расходы на индексы могут превысить достигнутый результат ускорения. Или ошибки в движке, которые правились сервиспаками. Ну и т.д. Я однажды наступал на подобные грабли, запрос был похожий Код: sql 1.
таблица открыта локально, монопольно, записей прядка 100+ млн. индексы были оба по f1 и f2, но в один прекрасный день этот запрос завесил проц на 100% и завершения я не дождался. Последующие проверки зависание повторяли, переиндексация не помогала. Помогла смена индекса на str(f1) + str(f2)А тут сразу всплывает версия самого фокса и его сервспаков. :) PS Пища для размышлений: почему MS SQL никогда не использует два индекса?А там индексы не по выражениям. И используются, в том числе, ВМЕСТО данных из таблицы. Поразмышляйте на досуге. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 16:22 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
[quot Sergey Sizov]А тут сразу всплывает версия самого фокса и его сервспаков. :) Visual FoxPro 09.00.0000.5815 for Windows Sergey SizovPS Пища для размышлений: почему MS SQL никогда не использует два индекса?А там индексы не по выражениям. И используются, в том числе, ВМЕСТО данных из таблицы. Поразмышляйте на досуге. ИМХО у меня объяснение "почему так" немного конспирологическое: рашмор изначально заточен на медленные сети порядка 10 Мбит, где выгоднее по индексам построить пересечение, т.е. список нужных записей, а затем тащить записи на клиента, но при при таблицах в миллионы записей и результаты десятки-сотни тыс. записей, этот алгоритм получается не самым лучшим решением. Повторюсь: сугубо ИМХО, просто предположение. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 16:37 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
Dima T, должно быть 09.00.0000.7423 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 16:59 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
Sergey Sizov, На таблице висит 200 юзеров. Как ты себе ты представляешь такое взрослое решение как индексация когда захочу (при этом она тоже требует времени) или работа такого кол-ва юзеров по обновлению 30 индексов? Мне требуется исполнение скрипта в пределах 10-15 сек, а тут одна из операций сжирает 25, а общее время вылетает под 100. Вопрос на самом деле почему выборка в одной копии таблицы происходит мгновенно, а в другой - достаточно долго. Сейчас скопировал исходную таблицу вместе с cdx. Сделал ее свободной. Выборка - долго. Переиндексировал - долго. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 17:05 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
glamisSergey Sizov, На таблице висит 200 юзеров. Как ты себе ты представляешь такое взрослое решение как индексация когда захочуГде, кто и когда такое предлагал? Плюнь тому в морду. :) (при этом она тоже требует времени) или работа такого кол-ва юзеров по обновлению 30 индексов?И опять двадцать пять... Какие еще 30 индексов? Мне требуется исполнение скрипта в пределах 10-15 сек, а тут одна из операций сжирает 25, а общее время вылетает под 100.Ну прям америку открыл, а мужики то и не знают... Ну так разбирайся почему так, чего тут ныть? Переиндексация, в общем-то, обслуживающая процедура и не должна проводится в рабочее время. Неужели первый раз об этом слышишь? Вопрос на самом деле почему выборка в одной копии таблицы происходит мгновенно, а в другой - достаточно долго. Сейчас скопировал исходную таблицу вместе с cdx. Сделал ее свободной. Выборка - долго. Переиндексировал - долго.Вопрос про сферического коня. Все зависит от твоей конкретики, которую тут никто не видит и может только гадать. Гадания тебе выдали. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 17:19 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
Sergey Sizov, Мне не нужно рассказывать как оптимизировать эту выборку. Я хочу понимать как работает Select и почему одни и те же данные в одних и тех же условиях он выбирает по разному. А какие построить индексы я уж и сам как-нить разберусь. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 17:29 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
glamis, наше дело предложить, ваше дело не воспользоваться нашим предложением. Успехов в гаданиях. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2018, 17:33 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
Sergey SizovDima T, должно быть 09.00.0000.7423 На сайте MS только SP2 в котором 09.00.0000.5815 9.0.0.7423 упоминается, но не качается. Качать непонятно откуда - страшновато. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 08:12 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
Dima T, нет там ничего страшного ибо там только DLL, которые надо руками разложить в нужные места. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 09:44 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
glamisВопрос на самом деле почему выборка в одной копии таблицы происходит мгновенно, а в другой - достаточно долго. Сейчас скопировал исходную таблицу вместе с cdx. Сделал ее свободной. Выборка - долго. Переиндексировал - долго. Ну вот же вам информация для анализа. На вскидку, 1я копия получилась сильно урезаной. Т.е. вовсе и не копией. Иначе трудно что то объяснить. Так как после точного копирования, все сразу сравнялось. Что мешает создать индекс как Sergey Sizov советует? И при чем тут 30 полей? Те поля что выбираются индексам не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 14:38 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
asdor, Дело в том, что выбор идет по полю oper с дополнительным фильтром empt(uslov), а Sergey Sizov советует для ускорения создать и индекс по uslov. Но выборки бывают с разными фильтрами, те для каждой выборки, по этой логике, нужен свой дополнительный индекс. А как быть с таким индексом, если требуется empt(uslov), !empt(uslov), uslov='12345'. Это ведь тоже разные индексы для оптимизатора. 1-я копия действительно урезана. Она меньше тыс. на 2 удаленных записей, при общем объеме 5500000. Получилась командой Copy to. Тут фишка в том, что если делать выборку where oper='007001', то в обоих случаях выборка происходит мгновенно, точнее не выборка а какой-то именованный фильтр. При этом recc() показывает количество записей в исходной таблице, а count количество записей в выборке. При попытке сделать Select из такой выборки система выдает ошибку и предлагает использовать форму into table для первоначальной выборки. Помогает Nofiltr, но при этом время выборки резко возрастает. Это к чему - для копии таблицы по такой же схеме срабатывает и where oper = '007001' and !empt(uslov), а для исходной не срабатывает. Вот вопрос и был - ПОЧЕМУ. а Sergey Sizov пытался рассказать КАК можно сделать. КАК можно я и сам знаю. Сейчас время срабатывания 0.1сек, но решение-то не системное... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2018, 10:58 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
Dima T, У меня SP3 стоит. По-крайней мере должна стоять:) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2018, 11:00 |
|
Почему Select медленно работает?
|
|||
---|---|---|---|
#18+
glamisasdor, Дело в том, что выбор идет по полю oper с дополнительным фильтром empt(uslov), а Sergey Sizov советует для ускорения создать и индекс по uslov.Точно-точно? А если внимательнее перечитать? Но выборки бывают с разными фильтрами,Какая неожиданная новость! те для каждой выборки, по этой логике, нужен свой дополнительный индекс.По какой ТАКОЙ логике? Если все время утверждалось, что индексы нужны по выражениям в условиях отборов? Типа выражения там никогда не повторяются? А как быть с таким индексом, если требуется empt(uslov), !empt(uslov),Эти два условия покрываются 1(Одним) индексом. uslov='12345'. Это ведь тоже разные индексы для оптимизатора.Разумеется. А вы, как я понимаю, хотите обойтись одним-двумя? На каком основании? 1-я копия действительно урезана. Она меньше тыс. на 2 удаленных записей, при общем объеме 5500000. Получилась командой Copy to. Тут фишка в том, что если делать выборку where oper='007001', то в обоих случаях выборка происходит мгновенно, точнее не выборка а какой-то именованный фильтр.То есть про способ выполнения запросов путем наложения хитрого фильтра вы не знаете. При этом recc() показывает количество записей в исходной таблице, а count количество записей в выборке. При попытке сделать Select из такой выборки система выдает ошибку и предлагает использовать форму into table для первоначальной выборки. Помогает Nofiltr, но при этом время выборки резко возрастает.Ибо не используются кэшированные данные и происходит физическая переливка данных в новый курсор Это к чему - для копии таблицы по такой же схеме срабатывает и where oper = '007001' and !empt(uslov), а для исходной не срабатывает. Кто на ком стоял? Вот вопрос и был - ПОЧЕМУ. а Sergey Sizov пытался рассказать КАК можно сделать. КАК можно я и сам знаю. Сейчас время срабатывания 0.1сек, но решение-то не системное...Интересно, как можно было что-то рассказать по поводу "почему?" если очень важная для этого информация только сейчас опубликована? Да, какое решение несистемное? Создание индексов? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2018, 11:49 |
|
|
start [/forum/topic.php?fid=41&gotonew=1&tid=1581805]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 153ms |
0 / 0 |