|
|
|
Поиск по номеру, SQL, индексы | ☑ | ||
|---|---|---|---|---|
|
0
ДенисЧ
26.05.10
✎
09:16
|
Простой запрос
SELECT док.IDDOC FROM $Документ.Заявка_шапка док, _1sjourn j WHERE j.iddoc = док.IDDOC AND j.DOCNO = 'al-90022' AND j.actcnt > 0 выполняется секунд 30-40, имеем index scan по индексу DOCNO (стандартный 1сный) select count(*) from _1sjourn == 1580192 Что можно сделать для ускорения? Ну, разумеется, кроме перестройки индекса :-) |
|||
|
1
Ёпрст
гуру
26.05.10
✎
09:27
|
(0) это же не весь запрос ?
|
|||
|
2
ДенисЧ
26.05.10
✎
09:35
|
(1) Ты не поверишь :-) Весь.
|
|||
|
3
VoditelKobyly
26.05.10
✎
09:35
|
(0) А период известен?
В индексе по DOCNO используется DNPREFIX DNPREFIX Назначение: Префикс номера документа. Тип - Строка(18). Для документов, у которых код числовой это поле равно десятичному ID вида документа. Если нумерация в пределах преиода - то также храниться и период в виде ГГГГММДД (например 2006 для нумерации в пределах года). |
|||
|
4
ДенисЧ
26.05.10
✎
09:36
|
(3) В том-то и фича, что нужно вне зависимости от периода... Иначе обошёлся бы простым НайтиПоНомеру
|
|||
|
5
Ёпрст
гуру
26.05.10
✎
09:37
|
(2) нафига тогда там $Документ.Заявка_шапка уперлась?
|
|||
|
6
VoditelKobyly
26.05.10
✎
09:38
|
(4) А ты попробуй условие всё ж таки добавь
|
|||
|
7
ДенисЧ
26.05.10
✎
09:39
|
(5) А я сам сейчас сижу и думаю, зачем :-)
Наверное, чтобы ограничить поиск только заявками Когда писал это, был слабовсебяем :-) Хотя пробовал добаить условие на iddocdef, без заявки - всё одно. |
|||
|
8
ДенисЧ
26.05.10
✎
09:39
|
(6) С условием-то работает нормально. Но мне что, все периоды перебирать?
А с like работает ещё медленней |
|||
|
9
VoditelKobyly
26.05.10
✎
09:40
|
(8) А что их много? годов то?
|
|||
|
10
ДенисЧ
26.05.10
✎
09:41
|
(9) Ну, штуки 4 уже есть...
|
|||
|
11
VoditelKobyly
26.05.10
✎
09:45
|
(10) Всё равно быстрее будет.
|
|||
|
12
ДенисЧ
26.05.10
✎
09:46
|
(11) А через 10 лет? :-)
Ну, я пока индексами обошёлся, всё равно база работает 24х7, и задание на создание допиндексов есть... |
|||
|
13
Ёпрст
гуру
26.05.10
✎
09:48
|
не вкурю..
вот так не устраивает ? SELECT Жур.IDDoc as [Док $Документ], Жур.IDDocDef as Док_вид FROM _1SJourn as Жур WHERE Жур.DocNo = 'al-90022' and Жур.IDDocDef = $ВидДокумента.Заявка_шапка |
|||
|
14
ДенисЧ
26.05.10
✎
09:50
|
(13) Пробовал. План запроса практически такой же. Индекс скан.
|
|||
|
15
Шляпентох
26.05.10
✎
10:11
|
А статистику не пробовали обновить?
|
|||
|
16
ДенисЧ
26.05.10
✎
10:13
|
(15) Даже индекс перестраивал :-)
|
|||
|
17
Шляпентох
26.05.10
✎
10:20
|
(16) не, это вам вряд ли бы помогло.. А какое соотношение [количество возвращаемых записей]/[общее количество записей в таблице]? Я правильно понимаю, что возвращается только одна запись (сорри, как 7.7 хранит данные даже не представляю)?
|
|||
|
18
ДенисЧ
26.05.10
✎
10:21
|
(17) соотношение 1 к 1580192 :-)
Ну может, не 1, а больше, но не 50%. Обычно от 1 до 10. |
|||
|
19
Шляпентох
26.05.10
✎
10:23
|
тогда это очень (прямо очень-очень-очень) сильно похоже на неправильную статистику.. А сканируемый индекс строится только по одному полю IDDoc? Если нет - оно в этом индексе первое?
|
|||
|
20
Шляпентох
26.05.10
✎
10:24
|
(19) в смысле DocNo
|
|||
|
21
ДенисЧ
26.05.10
✎
10:24
|
(19) Нет и нет :-)
Это я и сам знаю... |
|||
|
22
Шляпентох
26.05.10
✎
10:28
|
(21) ну так, если у вас нет подходящего индекса - как же вы хотите добиться Index Seek?
|
|||
|
23
ДенисЧ
26.05.10
✎
10:29
|
(22) Да я всё понимаю :-)
|
|||
|
24
Шляпентох
26.05.10
✎
10:30
|
хм.. окей (:
|
|||
|
25
А л
26.05.10
✎
11:47
|
попробуй такую конструкцию:
and j.DOCNO <= 'al-90022' and j.DOCNO >= 'al-90022' мне помогло при переходе с sql2000 на sql2005 на аналогичной базе |
|||
|
26
ДенисЧ
26.05.10
✎
11:48
|
(25) неа...
|
|||
|
27
Z1
26.05.10
✎
12:54
|
Для попадания в индекс надо задать dnprefix
Шапка Заявка вообще не нужна только напрягаешь оптимизатор запросов dnprefix - значение завимит от переодичность по виду документа. Если нумерация в пределах года то надо объеденить 4 запроса через union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962010 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962009 ' |
|||
|
28
Z1
26.05.10
✎
13:04
|
PS (как то не совсем так написал )
Если надо данные за 4 года то надо объеденить 4 запроса через union all 1с стандартый поиск - на каждый год строит свой отдельный запрос. Если хочешь еще большую скорость то для конкретного вида ( Видов ) документов можно написать специализированную хранимую процедуру. |
|||
|
29
smaharbA
26.05.10
✎
13:08
|
это 1с++ хреновит, в прямую при 250000 отрабатывает максимум за 0.1
|
|||
|
30
ДенисЧ
26.05.10
✎
13:08
|
(29) Очень смешно. План запроса я тоже через 1с++ смотрел?
|
|||
|
31
smaharbA
26.05.10
✎
13:09
|
(30) х.з. ))
но ведь отрабатывает не за 30 сек |
|||
|
32
Ёпрст
гуру
26.05.10
✎
13:10
|
(30) а скуль то какой у тебя ?, у меня на пол ляма обычный поиск милисекунды работает..
|
|||
|
33
ДенисЧ
26.05.10
✎
13:11
|
(32) 2005й.
|
|||
|
34
Ёпрст
гуру
26.05.10
✎
13:12
|
(33)не. у меня по старинке ,2000
надо бы тоже погонять, на 2005/2008.. |
|||
|
35
fisher
26.05.10
✎
13:20
|
(0) А так?
SELECT док.IDDOC FROM $Документ.Заявка_шапка док JOIN _1sjourn j ON j.iddoc = док.IDDOC WHERE j.DOCNO = 'al-90022' AND j.actcnt > 0 |
|||
|
36
Ёпрст
гуру
26.05.10
✎
13:22
|
(35) а зачем там табличка документа сдалась ? :)
|
|||
|
37
ДенисЧ
26.05.10
✎
13:22
|
(35) да это то же самое
|
|||
|
38
fisher
26.05.10
✎
13:22
|
(37) Я знаю. Пробовал?
|
|||
|
39
ДенисЧ
26.05.10
✎
13:23
|
(38) ПРобовал. План запроса совершенно аналогичен
|
|||
|
40
sapphire
26.05.10
✎
13:23
|
ыыы... а (NOLOCK) не нужен и SET NOCOUNT ON?
|
|||
|
41
ДенисЧ
26.05.10
✎
13:24
|
(40) Нолок не помешал бы, но пока не мешает. нокаунт не нужен. Это ж не триггер.
|
|||
|
42
fisher
26.05.10
✎
13:27
|
Как-то подозрительно долго даже для полного перебора полутора лямов записей...
ИМХО, если добиться сканирования по кластерному индексу - будет в разы быстрее. |
|||
|
43
sapphire
26.05.10
✎
13:40
|
(41) (NOLOCK) воткни
|
|||
|
44
sapphire
26.05.10
✎
13:41
|
Да ладно, Дениска просто небось прикалывается.
|
|||
|
45
kaiiii
26.05.10
✎
13:47
|
SQL 2005 кэширует планы запросов. Первый запрос всегда медленно. Остальные - быстро.
|
|||
|
46
Ёпрст
гуру
26.05.10
✎
13:48
|
(45) ну не 30 же секунд..
|
|||
|
47
fisher
26.05.10
✎
13:48
|
Может, фрагментация индекса сильная? Или у сервака проблемы с ресурсами?
|
|||
|
48
kaiiii
26.05.10
✎
13:50
|
(46) 10-15 секунд для любого запроса в первый раз всегда.
|
|||
|
49
fisher
26.05.10
✎
13:52
|
(48) обожаю категоричные высказывания.
Сказал, как отрезал. Даже "у меня" не добавил. |
|||
|
50
val
26.05.10
✎
13:52
|
(0)
1. Если убрать "AND j.actcnt > 0", план останется прежним? 2. Если 'al-90022' дополнить пробелами до длины DOCNO, план останется прежним? |
|||
|
51
kaiiii
26.05.10
✎
13:54
|
(49) ОК - у меня :) SQL-2005 Express на разных серверах (разных филиалах).
|
|||
|
52
Skom
26.05.10
✎
14:07
|
select IDDoc, docno
from _1SJourn (nolock) выполняется ~ 2 сек, результат 430204 доков select IDDoc, docno from _1SJourn (nolock) where iddocdef = 1611 выполняется ~ 2 сек, результат 37615 доков select IDDoc, docno from _1SJourn (nolock) where iddocdef = 1611 and docno = 'Т000000541' выполняется < 1сек. результат 3 дока |
|||
|
53
Skom
26.05.10
✎
14:07
|
+52
база комплексная скуль 2000-й |
|||
|
54
Skom
26.05.10
✎
14:08
|
+53
кстати ИНДЕКС СКАН |
|||
|
55
Ёпрст
гуру
26.05.10
✎
14:11
|
(53) у автора 2005, если что..
|
|||
|
56
fisher
26.05.10
✎
14:15
|
(51) Выноси свою проблему в отдельную ветку, детально описывай, и не делай больше скоропалительных выводов. А то оказывается сиквел меньше десяти секунд план запроса не составляет. А хлопцы-то и не знают...
Пока могу попробовать телепатировать, что дисковая подсистема у тебя везде отнюдь не серверная. Поэтому в первый раз выборки у тебя так долго и формируются. А на повторных кэш ДАННЫХ сиквела рулит (а не плана запроса). Или у тебя "SELECT 'Вася'" тоже 15 секунд план запроса конструирует? |
|||
|
57
Skom
26.05.10
✎
14:15
|
(55) я когда повыше прочитал...и уточнил что у меня
(53) |
|||
|
58
ДенисЧ
26.05.10
✎
14:24
|
(50) да и да
|
|||
|
59
kaiiii
26.05.10
✎
14:28
|
(56) Да ты не кипятись. У меня проблемы нет, чтобы выносить в отдельную ветку. Я всего лишь пытался подсказать автору одно из возможных объяснений. Кстати, ты прав, подсистема у меня действительно не серверная. А где написано, что у автора не так?
|
|||
|
60
val
26.05.10
✎
14:33
|
(58) А явное указание dnprefix в запросе?
|
|||
|
61
val
26.05.10
✎
14:47
|
+(60) Снимаю вопрос, не заметил (4)
|
|||
|
62
МихаилМ
26.05.10
✎
15:26
|
укажите отбор по полю "DNPREFIX"
тогда будет индексированный поиск никогда на это поле внимания не обращал. вроде оно состоит из id нумератора и года если указать это поле (с годами) скорость выборки (закешированной) в smss = 0. доков в базе ~4 850 000. |
|||
|
63
ДенисЧ
26.05.10
✎
15:28
|
(62) я вроде чётко задачу свою объяснил...
|
|||
|
64
val
26.05.10
✎
15:32
|
(63) Денис, я поэкспериментировал.
Если в запросе указать дополнительно DNPREFIX<>'' - получается INDEX SEEK |
|||
|
65
ДенисЧ
26.05.10
✎
15:39
|
(64) именно не равно пустое строке? Надо будет проверить....
|
|||
|
66
Ёпрст
гуру
26.05.10
✎
15:41
|
(64) аналогично, только время запроса уменьшилось ненамного.. (2000 скуль)
|
|||
|
67
МихаилМ
26.05.10
✎
15:43
|
(63)
так я Вам и указал что поле состоит из ид отбора и года так что уазав where DNPREFIX >= ' 296 ' and DNPREFIX >= ' 298 ' ,где ид отбора 287 Вы обстрагируетесь от года |
|||
|
68
МихаилМ
26.05.10
✎
15:44
|
+67
читать вместо 287 =297 |
|||
|
69
val
26.05.10
✎
15:44
|
(65) Именно. Этим мы принуждаем SQL использовать SEEK. Старый трюк.
|
|||
|
70
ДенисЧ
26.05.10
✎
15:49
|
(67) вот теперь понял. Проверим
|
|||
|
71
ДенисЧ
26.05.10
✎
15:49
|
(69) Ни разу не встречал..
|
|||
|
72
Ёпрст
гуру
26.05.10
✎
17:24
|
(71) ты там потом кинь результаты замеров..
|
|||
|
73
ДенисЧ
26.05.10
✎
17:27
|
(72) завтра утром, меня тут поднапрягли, некогда пока всё проверять.
|
|||
|
74
spock
26.05.10
✎
17:46
|
(0)Не, ну если тебе нужны сики, то пробуй так:
SELECT док.IDDOC FROM $Документ.Заявка_шапка as док (NOLOCK) INNER JOIN _1sjourn as j (NOLOCK) ON j.iddoc = док.IDDOC WHERE j.row_id IN (SELECT row_id FROM _1sjourn (NOLOCK) WHERE dnprefix != '' AND docno LIKE 'al-90022') AND j.actcnt > 0 (41)Назначение хинта NOLOCK понимаешь в полном объеме? |
|||
|
75
Sereja
27.05.10
✎
10:36
|
Так чем закончилось ? Мы же следим
|
|||
|
76
ДенисЧ
27.05.10
✎
10:36
|
некогда пока
(74) да, понимаю. |
|||
|
77
Кириллка
27.05.10
✎
10:41
|
(76)сомневаюсь, что понимаешь в полном объеме.
|
|||
|
78
ДенисЧ
27.05.10
✎
10:42
|
(77) Это твоё право...
|
|||
|
79
Кириллка
27.05.10
✎
10:51
|
я в (74) слегка погорячислся с таким dnprefix != '', наверно, следует заменить на dnprefix >= ''
|
|||
|
80
Ёпрст
гуру
27.05.10
✎
10:54
|
(79) да и как в (64) работает.
|
|||
|
81
Кириллка
27.05.10
✎
10:57
|
(80)ну тут принципиальное решение, а вдруг кто-то в этом поле '' пропишет.
|
|||
|
82
ДенисЧ
27.05.10
✎
11:03
|
После экспериментов получилось, что
and j.dnprefix > ' 15124' наиболее эффективно. Всем спасибо. |
|||
|
83
Ёпрст
гуру
27.05.10
✎
11:05
|
(82) ну ты как маленький.. время то какое теперь ?
Слово "эффективней" - это пустой звук, по сравнению с 30-40 секундами. |
|||
|
84
ДенисЧ
27.05.10
✎
11:07
|
(83) точно подсчитать не могу, но разница раза в 3
|
|||
|
85
Кириллка
27.05.10
✎
11:12
|
агуеть
|
|||
|
86
Z1
27.05.10
✎
16:54
|
(82) не получается.
ни теоретически - попробуй убеди меня почему мы в этом случае должны попадать в индекс.(хотя и виду план запроса в qa) ни практически. тесты приводяться ниже. |
|||
|
87
Z1
27.05.10
✎
16:56
|
Тесты запускал так.
Все тесты выполнялись в qa. С одного компьютера. Каждый запрос(тест) выполнял по три раза. Перед каждым стартом запроса делал очистку кеша процедур и очистку буфера данных. |
|||
|
88
Z1
27.05.10
✎
16:57
|
тест №1
SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix > ' 1962004 ' тест №2 SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix > ' 1962004 ' |
|||
|
89
Z1
27.05.10
✎
16:57
|
тест №3
SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962004 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962005 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962006 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962007 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962008 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962009 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962010 ' |
|||
|
90
Z1
27.05.10
✎
16:58
|
тест №4
SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962004 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962005 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962006 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962007 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962008 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962009 ' union all SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and Жур.dnprefix = ' 1962010 ' |
|||
|
91
Z1
27.05.10
✎
17:00
|
Тест1 №1 отличается от теста №2 наличием nolock
Тест1 №3 отличается от теста №4 наличием nolock Результаты в секундах ( то что показывает qa ) тест № 1 28 35 15 тест № 2 16 23 19 тест № 3 1 10 4 тест № 4 0 1 1 |
|||
|
92
Z1
27.05.10
✎
17:03
|
Все тесты естественно вернули одно и тоже количество строк ( четыре )
При выполнении более старших тестов общее число документов могло только увеличиваться. |
|||
|
93
smaharbA
27.05.10
✎
17:05
|
всеравно не понял откудова там десятки секунд
|
|||
|
94
Z1
27.05.10
✎
17:07
|
(93) база колбаситься сильно - ожидание окончания блокировок
|
|||
|
95
Z1
27.05.10
✎
17:08
|
если надо могу прогнать тесты вечером когда никто не будет работать
т.е. в этом случае должно быть тест1 = тест2 и тест3 = тест4 |
|||
|
96
Ёпрст
гуру
27.05.10
✎
17:09
|
(91) это на каком скуле ? 2000/2005 ?..
|
|||
|
97
Z1
27.05.10
✎
17:10
|
(96) sql200 sp3a
если надо то могу прогнать и на sql2005 только в той базе не будет рабочей нагрузки т.е. как юы ночной режим. |
|||
|
98
Z1
27.05.10
✎
17:12
|
сорри за незначительные опечатки как-то непривычно что нельзя отредактировать свои посты.
|
|||
|
99
Ёпрст
гуру
27.05.10
✎
17:14
|
(97) а такой что кажет ?
SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.dnprefix<>'' and Жур.DocNo = '18311' and Жур.IDDocDef = 196 |
|||
|
100
Z1
27.05.10
✎
17:17
|
тест № 5
SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.dnprefix<>'' and Жур.DocNo = '18311' and Жур.IDDocDef = 196 Результаты тест №5 19 20 14 |
|||
|
101
Z1
27.05.10
✎
17:20
|
То же не вижу в тест №5 попадания в индекс.
Может по каким-то причинам удается ввести оптимизатор запросов в заблуждение но потом при выпонении предполагаемый и реальный план могут отличаться. |
|||
|
102
Ёпрст
гуру
27.05.10
✎
17:25
|
(101) ну и для чистоты эксперимента:
тест № 6 SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 |
|||
|
103
smaharbA
27.05.10
✎
17:30
|
ниче не понимаю, со всеми преобразованиями
declare @start as datetime declare @count as int set @start=CURRENT_TIMESTAMP set @count=(SELECT count(*) /* Жур.IDDoc,Жур.dnprefix*/ FROM _1SJourn as Жур WHERE Жур.DocNo like 'ВЫП%' and Жур.IDDocDef = 1199) select @count,'==',datediff(ms,@start,CURRENT_TIMESTAMP) 2043 == 186 |
|||
|
104
smaharbA
27.05.10
✎
17:31
|
хотя база тормозная (вернее сама конфа )) )
|
|||
|
105
Z1
27.05.10
✎
17:36
|
(104) без коментариев
и причем тут конфа когда запускаю из qa тесты приведены общая тенденция будет на любой базе select count(*) from _1SJourn 5,328,544 |
|||
|
106
smaharbA
27.05.10
✎
17:38
|
(105) согласен, что база больше в 10 раз, но даже на 500 тыщах, выходить 200 миллисекунд
|
|||
|
107
smaharbA
27.05.10
✎
17:39
|
за тенденцию спасибо конечно
|
|||
|
108
Z1
27.05.10
✎
17:40
|
тест № 6
SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур (nolock) WHERE Жур.dnprefix<>'' and Жур.DocNo = '18311' and Жур.IDDocDef = 196 Результат тест № 6 13 10 16 |
|||
|
109
Ёпрст
гуру
27.05.10
✎
17:41
|
(108) неплохо.. даже без доп фильтра быстрее (1,2) :)
|
|||
|
110
smaharbA
27.05.10
✎
17:43
|
объясните для тупых и алкоголиков откудова секунды набегают ?!
|
|||
|
111
Z1
27.05.10
✎
17:44
|
(109) народ уже повалил с работы поэтому нельзя сказать что
нагрузка та же самая. |
|||
|
112
Z1
27.05.10
✎
17:46
|
(110) я не ставил задачу точно измерять время
время выдает qa в нижней строке ( в своей строке состояния ) как считает время qa я не знаю. |
|||
|
113
Z1
27.05.10
✎
17:51
|
(110) может у тебя вся база или вся таблица _1sjourn
со всеми индексами сидит в буферах ( т.е. вообще нет дисковых операций) я же специально перед каждым тестом очищию и буфер данных и кеш процедур |
|||
|
114
Z1
27.05.10
✎
17:57
|
(110) Если не очишить буфер данных и кеш процедур то даже тест № 6
при втором и следующих выполнениях дает 0 1 0 1 1 0 0 |
|||
|
115
Z1
27.05.10
✎
18:05
|
(109) >>>> неплохо.. даже без доп фильтра быстрее (1,2) :)
да оно и понятно добавив какое то "тупое" условие dnprefix<> "" хотим попасть в индекс - это фантастика. |
|||
|
116
Ёпрст
гуру
27.05.10
✎
18:10
|
(115) да, но в плане запроса видим index seek, заместо index scan
|
|||
|
117
Z1
27.05.10
✎
18:21
|
(116) <<<да, но в плане запроса видим index seek, заместо index scan>>>
Это как раз я тоже не понимаю почему.могу повторить только (101) Может по каким-то причинам удается ввести оптимизатор запросов в заблуждение но потом при выпонении предполагаемый и реальный план могут отличаться. |
|||
|
118
spock
27.05.10
✎
18:25
|
вы бы еще, кроме битвы за попадание в индекс, изучили селективность.
|
|||
|
119
spock
27.05.10
✎
18:40
|
(117) а чего покажет запрос (74)?
|
|||
|
120
spock
27.05.10
✎
18:43
|
+119 адаптированный вариант
SELECT j.IDDoc, j.dnprefix FROM _1sjourn as j (NOLOCK) WHERE j.row_id IN (SELECT row_id FROM _1sjourn (NOLOCK) WHERE dnprefix >= '' AND docno LIKE 'al-90022') AND j.actcnt > 0 |
|||
|
121
spock
27.05.10
✎
18:46
|
точнее, давай так:
DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE go SET STATISTICS IO ON SET STATISTICS TIME ON SELECT j.IDDoc, j.dnprefix FROM _1sjourn as j (NOLOCK) WHERE j.row_id IN (SELECT row_id FROM _1sjourn (NOLOCK) WHERE dnprefix >= '' AND docno LIKE 'al-90022') AND j.actcnt > 0 SET STATISTICS TIME OFF SET STATISTICS IO OFF go |
|||
|
122
Z1
27.05.10
✎
18:59
|
Тест № 7
SELECT j.IDDoc, j.dnprefix FROM _1sjourn as j (NOLOCK) WHERE j.row_id IN (SELECT row_id FROM _1sjourn (NOLOCK) WHERE dnprefix >= '' AND docno like '8311') and j.IDDocDef = 196 and j.docno = '8311' Результат тест № 7 18 20 21 |
|||
|
123
spock
27.05.10
✎
19:06
|
давай ты покажешь время, выданное скулем на закладке messages?
|
|||
|
124
Z1
27.05.10
✎
19:12
|
(123) команды
DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE go SET STATISTICS IO ON SET STATISTICS TIME ON SELECT j.IDDoc, j.dnprefix,j.docno,j.IDDocDef FROM _1sjourn as j (NOLOCK) WHERE j.row_id IN (SELECT row_id FROM _1sjourn (NOLOCK) WHERE dnprefix >= '' AND docno like '18311') and j.IDDocDef = 196 and j.docno = '18311' SET STATISTICS TIME OFF SET STATISTICS IO OFF |
|||
|
125
Z1
27.05.10
✎
19:13
|
Messages
SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. (4 row(s) affected) Table '_1SJOURN'. Scan count 15, logical reads 27091, physical reads 570, read-ahead reads 26977. SQL Server Execution Times: CPU time = 1234 ms, elapsed time = 22125 ms. |
|||
|
126
Z1
27.05.10
✎
19:19
|
Характеристики таблицы
_1SJOURN Число строк 5,328,643 Используемое пространство в килобайтах Всего 1,382,304 Данные 536,384 Индексы 829,704 Свободно 16,216 |
|||
|
127
spock
27.05.10
✎
19:26
|
ну и для порядка: dbcc show_statistics (_1sjourn, docno)
|
|||
|
128
Z1
27.05.10
✎
19:32
|
May 27 2010 5:20AM 5323319 71309 180 0.0 37.0
5.5555557E-3 18.0 DNPREFIX 1.9435591E-7 33.0 DNPREFIX, DOCNO 1.8785273E-7 37.0 DNPREFIX, DOCNO, ROW_ID 422002 0.0 160.0 0 0.0 422003 9.9447511E-2 720.0 0 74.651436 422004 9.9447511E-2 80.0 0 74.651436 422005 9.9447511E-2 80.0 0 74.651436 422006 9.9447511E-2 240.0 0 74.651436 422007 9.9447511E-2 240.0 0 74.651436 422008 9.9447511E-2 400.0 0 74.651436 422009 9.9447511E-2 614.0 0 74.651436 422010 9.9447511E-2 187.0 0 74.651436 1872003 9.9447511E-2 480.0 0 74.651436 1872004 9.9447511E-2 80.0 0 74.651436 1872005 9.9447511E-2 160.0 0 74.651436 1872006 9.9447511E-2 160.0 0 74.651436 1872007 9.9447511E-2 480.0 0 74.651436 1872008 9.9447511E-2 720.0 0 74.651436 1872009 9.9447511E-2 383.0 0 74.651436 1872010 9.9447511E-2 175.0 0 74.651436 1962002 9.9447511E-2 160.0 0 74.651436 1962003 9.9447511E-2 880.0 0 74.651436 1962004 9.9447511E-2 1040.0 0 74.651436 1962005 9.9447511E-2 2880.0 0 74.651436 1962006 9.9447511E-2 2612.0 0 74.651436 1962007 9.9447511E-2 3308.0 0 74.651436 1962008 9.9447511E-2 3838.0 0 74.651436 1962009 9.9447511E-2 4380.0 0 74.651436 1962010 9.9447511E-2 1984.0 0 74.651436 2392006 9.9447511E-2 80.0 0 74.651436 2392007 9.9447511E-2 1.0 0 74.651436 2392009 9.9447511E-2 171.0 0 74.651436 2392010 9.9447511E-2 11.0 0 74.651436 2972004 9.9447511E-2 80.0 0 74.651436 2972005 9.9447511E-2 160.0 0 74.651436 2972007 9.9447511E-2 161.0 0 74.651436 2972008 9.9447511E-2 240.0 0 74.651436 2972009 9.9447511E-2 343.0 0 74.651436 2972010 9.9447511E-2 65.0 0 74.651436 3222004 9.9447511E-2 320.0 0 74.651436 3222005 9.9447511E-2 160.0 0 74.651436 3222006 9.9447511E-2 80.0 0 74.651436 3222007 9.9447511E-2 240.0 0 74.651436 3222008 9.9447511E-2 240.0 0 74.651436 3222009 9.9447511E-2 410.0 0 74.651436 3222010 9.9447511E-2 87.0 0 74.651436 3362003 9.9447511E-2 320.0 0 74.651436 3362005 9.9447511E-2 160.0 0 74.651436 3362006 9.9447511E-2 80.0 0 74.651436 3362007 9.9447511E-2 160.0 0 74.651436 3362008 9.9447511E-2 160.0 0 74.651436 3362009 9.9447511E-2 240.0 0 74.651436 3362010 9.9447511E-2 71.0 0 74.651436 3552002 9.9447511E-2 80.0 0 74.651436 3552003 9.9447511E-2 640.0 0 74.651436 3552004 9.9447511E-2 560.0 0 74.651436 3552005 9.9447511E-2 880.0 0 74.651436 3552006 9.9447511E-2 880.0 0 74.651436 3552007 9.9447511E-2 1521.0 0 74.651436 3552008 9.9447511E-2 1517.0 0 74.651436 3552009 9.9447511E-2 2346.0 0 74.651436 3552010 9.9447511E-2 677.0 0 74.651436 3812002 9.9447511E-2 80.0 0 74.651436 3812003 9.9447511E-2 160.0 0 74.651436 3812005 9.9447511E-2 80.0 0 74.651436 3812006 9.9447511E-2 249.0 0 74.651436 3812007 9.9447511E-2 354.0 0 74.651436 3812008 9.9447511E-2 160.0 0 74.651436 3812009 9.9447511E-2 209.0 0 74.651436 3812010 9.9447511E-2 135.0 0 74.651436 6492002 9.9447511E-2 80.0 0 74.651436 6492009 9.9447511E-2 1.0 0 74.651436 8442003 9.9447511E-2 80.0 0 74.651436 8442005 9.9447511E-2 160.0 0 74.651436 8442006 9.9447511E-2 400.0 0 74.651436 8442007 9.9447511E-2 160.0 0 74.651436 8442008 9.9447511E-2 160.0 0 74.651436 8442009 9.9447511E-2 259.0 0 74.651436 8442010 9.9447511E-2 54.0 0 74.651436 13902008 9.9447511E-2 80.0 0 74.651436 13902009 9.9447511E-2 20.0 0 74.651436 13902010 9.9447511E-2 8.0 0 74.651436 14992004 9.9447511E-2 320.0 0 74.651436 14992005 9.9447511E-2 160.0 0 74.651436 14992006 9.9447511E-2 318.0 0 74.651436 14992007 9.9447511E-2 80.0 0 74.651436 14992008 9.9447511E-2 480.0 0 74.651436 14992009 9.9447511E-2 667.0 0 74.651436 14992010 9.9447511E-2 181.0 0 74.651436 18142004 9.9447511E-2 160.0 0 74.651436 18142005 9.9447511E-2 80.0 0 74.651436 18142006 9.9447511E-2 80.0 0 74.651436 18142008 9.9447511E-2 240.0 0 74.651436 18142009 9.9447511E-2 15.0 0 74.651436 18142010 9.9447511E-2 37.0 0 74.651436 34452003 9.9447511E-2 80.0 0 74.651436 34452005 9.9447511E-2 320.0 0 74.651436 34452006 9.9447511E-2 400.0 0 74.651436 34452007 9.9447511E-2 880.0 0 74.651436 34452008 9.9447511E-2 1280.0 0 74.651436 34452009 9.9447511E-2 1149.0 0 74.651436 34452010 9.9447511E-2 399.0 0 74.651436 39922007 9.9447511E-2 80.0 0 74.651436 39922010 9.9447511E-2 8.0 0 74.651436 40222003 9.9447511E-2 160.0 0 74.651436 40222006 9.9447511E-2 80.0 0 74.651436 40222007 9.9447511E-2 80.0 0 74.651436 40222008 9.9447511E-2 80.0 0 74.651436 40222009 9.9447511E-2 56.0 0 74.651436 40222010 9.9447511E-2 30.0 0 74.651436 42222002 9.9447511E-2 1.0 0 74.651436 42222003 9.9447511E-2 1.0 0 74.651436 42222004 9.9447511E-2 2.0 0 74.651436 42222005 9.9447511E-2 76.0 0 74.651436 42222006 9.9447511E-2 85.0 0 74.651436 42222007 9.9447511E-2 91.0 0 74.651436 42222008 9.9447511E-2 152.0 0 74.651436 42222009 9.9447511E-2 27.0 0 74.651436 42222010 9.9447511E-2 37.0 0 74.651436 43262003 9.9447511E-2 80.0 0 74.651436 43262009 9.9447511E-2 2.0 0 74.651436 43262010 9.9447511E-2 7.0 0 74.651436 45742002 9.9447511E-2 80.0 0 74.651436 45742003 9.9447511E-2 160.0 0 74.651436 45742008 9.9447511E-2 80.0 0 74.651436 45742009 9.9447511E-2 12.0 0 74.651436 45742010 9.9447511E-2 7.0 0 74.651436 50002003 9.9447511E-2 80.0 0 74.651436 5064 9.9447511E-2 111.0 0 74.651436 51892009 9.9447511E-2 2.0 0 74.651436 51892010 9.9447511E-2 3.0 0 74.651436 5488 9.9447511E-2 8.0 0 74.651436 55532003 9.9447511E-2 80.0 0 74.651436 55532004 9.9447511E-2 80.0 0 74.651436 55532005 9.9447511E-2 80.0 0 74.651436 55532006 9.9447511E-2 1.0 0 74.651436 55532008 9.9447511E-2 81.0 0 74.651436 55532009 9.9447511E-2 258.0 0 74.651436 55532010 9.9447511E-2 59.0 0 74.651436 58122004 9.9447511E-2 160.0 0 74.651436 58122005 9.9447511E-2 80.0 0 74.651436 58122006 9.9447511E-2 160.0 0 74.651436 58122007 9.9447511E-2 400.0 0 74.651436 58122008 9.9447511E-2 320.0 0 74.651436 58122009 9.9447511E-2 65.0 0 74.651436 58122010 9.9447511E-2 85.0 0 74.651436 58482004 9.9447511E-2 160.0 0 74.651436 58482005 9.9447511E-2 240.0 0 74.651436 58482006 9.9447511E-2 880.0 0 74.651436 58482007 9.9447511E-2 1120.0 0 74.651436 58482008 9.9447511E-2 640.0 0 74.651436 58482009 9.9447511E-2 826.0 0 74.651436 58482010 9.9447511E-2 213.0 0 74.651436 59862006 9.9447511E-2 160.0 0 74.651436 59862007 9.9447511E-2 80.0 0 74.651436 59862009 9.9447511E-2 141.0 0 74.651436 59862010 9.9447511E-2 28.0 0 74.651436 60412009 9.9447511E-2 3.0 0 74.651436 60412010 9.9447511E-2 2.0 0 74.651436 61562003 9.9447511E-2 400.0 0 74.651436 61562004 9.9447511E-2 800.0 0 74.651436 61562005 9.9447511E-2 880.0 0 74.651436 61562006 9.9447511E-2 1040.0 0 74.651436 61562007 9.9447511E-2 1280.0 0 74.651436 61562008 9.9447511E-2 1760.0 0 74.651436 61562009 9.9447511E-2 2839.0 0 74.651436 61562010 9.9447511E-2 1135.0 0 74.651436 61752005 9.9447511E-2 80.0 0 74.651436 61752006 9.9447511E-2 80.0 0 74.651436 61752007 9.9447511E-2 316.0 0 74.651436 61752008 9.9447511E-2 241.0 0 74.651436 61752009 9.9447511E-2 351.0 0 74.651436 61752010 9.9447511E-2 51.0 0 74.651436 62652009 9.9447511E-2 1.0 0 74.651436 64352005 9.9447511E-2 80.0 0 74.651436 64352007 9.9447511E-2 240.0 0 74.651436 64352008 9.9447511E-2 480.0 0 74.651436 64352009 9.9447511E-2 217.0 0 74.651436 64352010 9.9447511E-2 115.0 0 74.651436 69822007 9.9447511E-2 480.0 0 74.651436 69822008 9.9447511E-2 320.0 0 74.651436 72072009 9.9447511E-2 141.0 0 74.651436 72072010 9.9447511E-2 105.0 0 74.651436 May 27 2010 5:20AM 5323319 72747 200 3.0050911E-3 19.0 4.6710202E-6 15.0 DOCNO 1.8785273E-7 19.0 DOCNO, ROW_ID --- 0.0 1.0 0 0.0 46 100.46195 105.0 0 2405.4971 618 228.46196 38.0 0 870.88971 624 236.46196 13.0 0 3426.011 787 468.46194 10.0 0 740.03107 1830 327.46194 6.0 1 239.87608 4507 482.46194 2.0 11 40.810951 7846 462.46194 3.0 9 50.36813 11321 489.46194 2.0 9 53.700695 15404 440.46194 2.0 399 1.1038355 18115 449.46194 1.0 6 73.216873 43503 476.46194 7.0 474 1.0044053 43822 348.46194 8.0 2 172.5278 56306 246.46196 11.0 1 172.35326 61096 219.46196 13.0 1 205.89574 63473 202.46196 13.0 0 214.9482 64818 172.46196 15.0 0 185.49396 67825 215.46196 11.0 1 125.7245 71134 219.46196 11.0 1 201.45222 71709 226.46196 9.0 0 240.81259 74058 235.46196 8.0 2 105.36922 83149 277.46194 11.0 2 131.64447 88952 294.46194 17.0 1 185.90329 96101 144.46196 17.0 0 261.07486 98110 346.46194 12.0 1 341.83347 *к12115 503.46194 1.0 18 27.292036 *о4521 384.46194 1.0 382 1.0044053 *о7127 256.46194 1.0 255 1.0044053 *п251 384.46194 1.0 382 1.0044053 104 512.46198 1.0 510 1.0044053 109986 348.46194 16.0 11 29.794792 111157 187.46196 15.0 0 236.97917 114773 378.46194 1.0 5 63.709499 123 254.46196 23.0 6 40.829758 124 262.46194 25.0 1 202.81735 125 122.46195 34.0 5 21.214859 127 321.46194 14.0 8 37.039299 128089 265.46194 12.0 3 70.073502 129513 478.46194 1.0 2 159.81866 148507 465.46194 10.0 10 44.375668 149966 241.46196 6.0 1 146.0954 154939 363.46194 8.0 5 61.25618 15614 128.46196 2.0 3 39.842125 163112 474.46194 6.0 5 94.275154 166793 210.46196 13.0 5 38.936501 16818 249.46196 2.0 2 93.416954 177485 376.46194 7.0 21 17.715305 180425 298.46194 7.0 4 73.904991 188916 287.46194 7.0 5 54.978226 1957 256.46194 2.0 7 32.386051 20336 384.46194 1.0 57 6.7073765 204957 220.46196 8.0 10 21.381958 21 339.46194 43.0 4 71.491638 218340 295.46194 3.0 4 67.367867 222306 321.46194 1.0 6 52.022861 233463 512.46198 1.0 32 15.943987 234018 256.46194 1.0 9 27.102596 23903/2/1/1 384.46194 1.0 16 22.908178 24333 256.46194 2.0 26 9.6024599 252551 384.46194 2.0 21 18.250793 25454*/1 256.46194 1.0 8 29.372711 2876/1 512.46198 1.0 160 3.1920488 29691 384.46194 1.0 348 1.1042041 31406 384.46194 1.0 348 1.1042041 319840 256.46194 1.0 255 1.0044053 3270 384.46194 1.0 348 1.1042041 344173 385.46194 2.0 14 27.504692 358985 384.46194 1.0 48 7.9340987 37827 423.46194 2.0 65 6.4375529 389596 357.46194 2.0 27 13.060928 3931 313.46194 2.0 110 2.8432131 4 275.46194 124.0 8 32.611973 4266 512.46198 1.0 510 1.0044053 521 144.46196 2.0 143 1.0044053 531 382.46194 5.0 8 44.336876 5538 257.46194 2.0 4 58.66206 60 384.46194 2.0 11 34.157837 6171/1 256.46194 1.0 5 42.855774 629 293.46194 2.0 63 4.613544 75 410.46194 30.0 47 8.5653276 98 509.46194 11.0 10 48.66016 R002645 274.46194 2.0 16 16.812269 б1 288.46194 2.0 187 1.540327 б109 233.46196 2.0 60 3.8664989 б16 286.46194 2.0 68 4.2016225 б1826 384.46194 3.0 6 59.780216 б28 290.46194 2.0 7 38.402973 б80 383.46194 2.0 198 1.9327819 б963 282.46194 3.0 9 28.956753 бр194 496.46194 2.0 30 16.280867 бр5963 401.46194 2.0 53 7.5445948 бр6510 256.46194 2.0 23 10.821054 В-1 461.46194 2.0 418 1.1037204 в390_ф40 256.46194 1.0 39 6.5144658 в506 395.46194 2.0 131 3.0082054 в590 256.46194 1.0 54 4.6889334 Вг144 512.46198 1.0 467 1.0968032 Вг1621 256.46194 1.0 12 20.084141 Вг4835 512.46198 1.0 510 1.0044053 ВгС44 512.46198 1.0 135 3.7925019 вл4096 511.46194 2.0 19 26.075144 Дог 501.46194 65.0 29 17.003719 ЗАО-07-л2368 256.46194 1.0 5 50.812893 ЗАО-10-Пт153 512.46198 1.0 510 1.0044053 И143/09-Д 400.46194 13.0 180 2.2228465 к121 256.46194 2.0 15 16.104504 к217 512.46198 1.0 10 48.169682 к6310 512.46198 1.0 464 1.1034805 к9279 512.46198 1.0 196 2.6053488 к9496 256.46194 1.0 9 26.472019 кр207 512.46198 2.0 176 2.8981133 кр2257 256.46194 1.0 33 7.7009296 кр5488 512.46198 1.0 467 1.0968032 кр6785 512.46198 1.0 116 4.38872 кр8624/1 512.46198 1.0 109 4.6886358 л14 511.46194 2.0 354 1.4414421 л20_ф166 256.46194 1.0 21 12.136874 л5846/1 512.46198 1.0 53 9.601202 л93_ф166 512.46198 1.0 52 9.8473396 ли12009/1/1/1 256.46194 1.0 18 14.075667 ли1803 512.46198 1.0 37 13.733577 ли552 384.46194 1.0 382 1.0044053 ли7977 384.46194 1.0 382 1.0044053 Мрк89 384.46194 1.0 382 1.0044053 мт271 384.46194 1.0 382 1.0044053 н12354 384.46194 1.0 382 1.0044053 н864/1 259.46194 2.0 258 1.0044053 Нчк2408 384.46194 1.0 249 1.5403128 о1_ф370 368.46194 2.0 366 1.0044053 о109_ф166 258.46194 2.0 33 7.6977115 о121 259.46194 2.0 17 15.194752 о165 323.46194 2.0 16 19.894131 о1766 256.46194 2.0 3 65.922768 о251 280.46194 2.0 87 3.1919804 о372 255.46196 2.0 18 13.480292 о7886 384.46194 1.0 31 12.135526 ос291 348.46194 2.0 317 1.0988439 п14623/1 384.46194 1.0 382 1.0044053 п2086 258.46194 2.0 10 25.476034 п2655 384.46194 1.0 6 57.473549 п313 298.46194 3.0 10 29.152456 п373_ф278 384.46194 1.0 13 29.147175 п9061 384.46194 1.0 40 9.6016207 п9755/1 384.46194 1.0 348 1.1042041 Пт282 384.46194 1.0 44 8.7258511 р10309 384.46194 1.0 350 1.0982455 р11616/1 384.46194 1.0 249 1.5403128 р1328 384.46194 1.0 81 4.688735 р1432 384.46194 1.0 29 12.973774 р166_ф370 384.46194 1.0 75 5.0662103 р2539/1 384.46194 1.0 54 7.0955534 р3612 384.46194 2.0 26 14.249214 р4202 384.46194 1.0 31 12.135526 р591 384.46194 1.0 75 5.0662103 р97 384.46194 2.0 70 5.4823108 РС-04-678 384.46194 1.0 34 11.230679 РЭ57 384.46194 1.0 50 7.5414853 с1271_ф40 384.46194 1.0 16 23.708727 С13921/1 384.46194 1.0 36 10.411587 С251_ф166 512.46198 1.0 510 1.0044053 С6409 384.46194 1.0 350 1.0982455 с6687 384.46194 1.0 16 23.307232 С8440 384.46194 1.0 33 11.643694 сп1036 384.46194 1.0 54 7.0955534 сп1272/1/1 384.46194 1.0 12 31.078287 сп1904/1/1/1 384.46194 1.0 249 1.5403128 сп2333 384.46194 1.0 57 6.7073765 сп3374 384.46194 1.0 30 12.553459 сп4283 384.46194 1.0 36 10.411587 сп4925/1 384.46194 1.0 48 7.9340987 сп5710 384.46194 1.0 26 14.249214 сп7878 384.46194 1.0 81 4.688735 сп96 436.46194 2.0 397 1.0975566 ст5076/1 408.46194 2.0 406 1.0044053 Сэ826 512.46198 1.0 510 1.0044053 т2590 384.46194 1.0 65 5.9006729 т381 384.46194 1.0 42 9.1250257 т5537 384.46194 1.0 70 5.4823108 тв36 392.46194 2.0 85 4.57656 тв469/1/1 384.46194 1.0 18 21.011658 тС53 459.46194 2.0 66 6.9392896 у12267 384.46194 1.0 27 13.82163 у14343 439.46194 2.0 437 1.0044053 у17270 512.46198 1.0 510 1.0044053 у2359/1 416.46194 2.0 414 1.0044053 у3203 512.46198 1.0 52 9.8473396 у4982/2 400.46194 2.0 398 1.0044053 у7736 512.46198 1.0 510 1.0044053 ул234 412.46194 2.0 373 1.1040071 ульян114 384.46194 1.0 7 50.879314 ф5-906250460 512.46198 1.0 443 1.15441 чр2406 512.46198 1.0 443 1.15441 э17 401.46194 2.0 98 4.0904431 э2238 384.46194 2.0 18 21.011658 э286 383.46194 2.0 25 15.194069 э373 384.46194 3.0 8 45.483765 э52 470.46194 3.0 8 57.385818 Ю-54 415.46194 4.0 19 21.008913 январь98 118.46195 1.0 1 65.993271 январь99 1.4619542 1.0 1 1.0044053 |
|||
|
129
val
27.05.10
✎
19:45
|
(127) (128)
Следил за Вашей дискуссией и пробовал у себя. И ничего не понимал. Пока внимательно не посмотрел на physical reads для разных вариантов. После этого перестроил идексы: DBCC DBREINDEX(_1sjourn). И проверил еще раз. Проверьте и Вы. Будете приятно удивлены. |
|||
|
130
Z1
27.05.10
✎
19:53
|
(129) во первых не могу.
некоторые работают до 22,23 во вторых каждую ночь идет дефрагментация defrag всей базы и обновление статистики по всем индексам в третьих даже если индексы и "плохие" то они "плохие" для всех тестов практически одинаково. Общая тенденция останеться той же. |
|||
|
131
val
27.05.10
✎
20:05
|
(130)
1. По планам выполнения. Конечно я смотрел Execution, а не Estimated. 2. Для Index Seek physical reads у меня был неожиданно большой. Это говорит о неоптимальности индекса. 3. Дефрагментация и перестройка индексов - две большие разницы. 4. Почему бы Вам не попробовать на копии базы. 5. Для себя я уже сделал вывод и включу перестройку индексов в шедулер. |
|||
|
132
spock
27.05.10
✎
20:05
|
(130)у тебя тесты нечестные.
|
|||
|
133
spock
27.05.10
✎
20:06
|
+132 я только сейчас увидел, что тесты с разными критериями.
|
|||
|
134
Z1
27.05.10
✎
20:12
|
(132) тест №7 это твой тест.
Давай свои тесты. Просто я считаю ( может и ошибчно ) что надо делать поиск по номеру как в тесте № 4 ( 1с.exe так и делает только на каждый год свой запрос) ну и у меня мой поиск работает как в тесте 4 Здесь же утверждалось что тест № 2 лучше. Я с этим не согласен. см (82) >>> and j.dnprefix > ' 15124' >>> наиболее эффективно. |
|||
|
135
Z1
27.05.10
✎
20:17
|
(131) Вы буфер данных чистили после переиндексации ?
а то ведь все в кеше см например пост (114) |
|||
|
136
val
27.05.10
✎
20:18
|
(135) Да.
|
|||
|
137
Z1
27.05.10
✎
20:24
|
(136) Ну тогда надо придумать сначала какой то тест который покажет
Время до выполнения перестроения индексов Сделать дефрагментацию Прогнать тест Сделать переиндексацию Прогнать тест Ставить переиндексацию ночью рискованно ( если только в субботу раз в неделю). Вдруг индекс "слетит" и придеться восстанавливать утром в рабочее время. По закону подлости это произойдет в самый плохой для Вас момент. |
|||
|
138
Шляпентох
28.05.10
✎
06:11
|
(117) А можете выложить план запроса в текстовом виде? И результат
SELECT COUNT(DISTINCT dnprefix), COUNT(*) FROM _1sjourn ? Если количество разных dnprefix мало, то план будет показывать Index Seek, но внутри все равно будет сканирование. Чтобы увидеть его в графическом представлении - посмотрите во всплывающей подсказке на Index Seek - какие поля стоят в Seek Predicates и Predicates. |
|||
|
139
Z1
28.05.10
✎
08:09
|
(138) результат запроса
SELECT COUNT(DISTINCT dnprefix), COUNT(*) FROM _1sjourn 310 5328736 "А можете выложить план запроса в текстовом виде?" о каком тесте идет речь ? |
|||
|
140
Z1
28.05.10
✎
08:17
|
Перечитал ветку
написал новый тест тест на основе МихаилМ пост (67) тест № 8 SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.DocNo = '18311' and Жур.IDDocDef = 196 and (Жур.dnprefix between ' 196 ' and ' 196z ' ) Результаты теста №8 19 23 24 |
|||
|
141
Шляпентох
28.05.10
✎
11:21
|
(139) о любом, где в плане видно Index Seek. Но, судя по соотношению количества записей, SQL Server только думает, что использует Index Seek, а фактически все сводится к Index Scan'у.. Т.е. он смотрит, что поля dnprefix и docno в индексе стоят рядом, на оба есть условия => лучше всего было бы использовать Index Seek, а уже потом, когда во время выполнения накладывает условия, ему приходится "просматривать" все записи индекса, поскольку условие на dnprefix, на самом деле, условием отбора не является
|
|||
|
142
trad
28.05.10
✎
11:39
|
(141) присоединяюсь к утверждению
|
|||
|
143
Z1
28.05.10
✎
11:42
|
(141) Как получить план запроса в текстовом виде ?
Также есть предложение продублировать ветку на 1cpp.ru - просто там можно поместитьв пост и картинку и файл прикрепить |
|||
|
144
trad
28.05.10
✎
11:55
|
||||
|
145
Z1
28.05.10
✎
11:59
|
SET SHOWPLAN_TEXT ON
go SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.dnprefix<>'' and Жур.DocNo = '18311' and Жур.IDDocDef = 196 go SET SHOWPLAN_TEXT OFF go Результат |--Filter(WHERE:([Жур].[IDDOCDEF]=Convert([@3]))) |--Bookmark Lookup(BOOKMARK:([Bmk1000]), OBJECT:([Millenium].[dbo].[_1SJOURN] AS [Жур]) WITH PREFETCH) |--Parallelism(Gather Streams) |--Index Seek(OBJECT:([Millenium].[dbo].[_1SJOURN].[DOCNO] AS [Жур]), SEEK:([Жур].[DNPREFIX] < '' OR [Жур].[DNPREFIX] > ''), WHERE:([Жур].[DOCNO]='18311') ORDERED FORWARD) |
|||
|
146
Z1
28.05.10
✎
12:02
|
SET STATISTICS PROFILE ON
go SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.dnprefix<>'' and Жур.DocNo = '18311' and Жур.IDDocDef = 196 go SET STATISTICS PROFILE OFF go результат 4 1 SELECT [IDDoc]=[Жур].[IDDoc],[dnprefix]=[Жур].[dnprefix] FROM [_1SJourn] [Жур] WHERE [Жур].[dnprefix]<>@1 AND [Жур].[DocNo]=@2 AND [Жур].[IDDocDef]=@3 3 1 0 NULL NULL NULL NULL 40.168922 NULL NULL NULL 7.557622 NULL NULL SELECT 0 NULL 4 1 |--Filter(WHERE:([Жур].[IDDOCDEF]=Convert([@3]))) 3 3 1 Filter Filter WHERE:([Жур].[IDDOCDEF]=Convert([@3])) NULL 40.168922 0.0 6.5621367E-5 115 7.5576177 [Жур].[DNPREFIX], [Жур].[IDDOC] NULL PLAN_ROW 0 1.0 7 1 |--Bookmark Lookup(BOOKMARK:([Bmk1000]), OBJECT:([Millenium].[dbo].[_1SJOURN] AS [Жур]) WITH PREFETCH) 3 4 3 Bookmark Lookup Bookmark Lookup BOOKMARK:([Bmk1000]), OBJECT:([Millenium].[dbo].[_1SJOURN] AS [Жур]) WITH PREFETCH [Жур].[IDDOCDEF], [Жур].[DNPREFIX], [Жур].[IDDOC] 136.71118 0.42499661 1.503823E-4 115 7.5575523 [Жур].[IDDOCDEF], [Жур].[DNPREFIX], [Жур].[IDDOC] NULL PLAN_ROW 0 1.0 7 1 |--Parallelism(Gather Streams) 3 6 4 Parallelism Gather Streams NULL NULL 136.71118 0.0 2.8888192E-2 62 7.1324053 [Bmk1000] NULL PLAN_ROW -1 1.0 7 8 |--Index Seek(OBJECT:([Millenium].[dbo].[_1SJOURN].[DOCNO] AS [Жур]), SEEK:([Жур].[DNPREFIX] < '' OR [Жур].[DNPREFIX] > ''), WHERE:([Жур].[DOCNO]='18311') ORDERED FORWARD) 3 7 6 Index Seek Index Seek OBJECT:([Millenium].[dbo].[_1SJOURN].[DOCNO] AS [Жур]), SEEK:([Жур].[DNPREFIX] < '' OR [Жур].[DNPREFIX] > ''), WHERE:([Жур].[DOCNO]='18311') ORDERED FORWARD [Bmk1000], [Жур].[DOCNO] 136.71118 4.9883933 1.4753946 62 6.463788 [Bmk1000], [Жур].[DOCNO] NULL PLAN_ROW -1 1.0 |
|||
|
147
Z1
28.05.10
✎
12:08
|
так как насчет продублировать ветку на 1сpp ?
с одной стороны можем запутаться. и может так неправильно делать. с другой стороны форум чуть удобней. да и кто-то есть там и по каким либо соображениям его нет тут. |
|||
|
148
Шляпентох
28.05.10
✎
12:42
|
(145) Да, так и есть..
SEEK:([Жур].[DNPREFIX] < '' OR [Жур].[DNPREFIX] > ''), WHERE:([Жур].[DOCNO]='18311') По первому столбцу индекса он находит записи, удовлетворяющие условию (т.е. всю таблицу), а потом из них отбирает те, которые удовлетворяют условию docno = '18311'. Все-таки непонятно чем вызвана разница во времени выполнения в три раза в (82). Хотя если в таблице есть записи с dnprefix <= ' 15124', то все становится объяснимо. (147) по поводу 1cpp ничего не могу вам сказать, но если хотите переместиться туда, я, в принципе, не против (: |
|||
|
149
Z1
28.05.10
✎
12:56
|
завел аналогичную ветку
http://www.1cpp.ru/forum/YaBB.pl?num=1275037619 |
|||
|
150
Z1
28.05.10
✎
12:59
|
Также проверил на sql2005 sp2 ( база таже на вчера УРБД )
SELECT Жур.IDDoc,Жур.dnprefix FROM _1SJourn as Жур WHERE Жур.dnprefix<>'' and Жур.DocNo = '18311' and Жур.IDDocDef = 196 графический алан выполнения тоже Index Seek |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |