![]() |
![]() |
|
Индексирование полей типа "Дата" | ☑ | ||
---|---|---|---|---|
0
DF_Slayer
01.12.08
✎
12:39
|
Всем привет, кого не видел :)
Есть запрос, в котором имеется следующее условие |ГДЕ | Рег.ДатаНачала > &ДатаНачала | И Рег.ДатаНачала < &ДатаОкончания Вопрос. Использует ли 1С индексы в случае такого условия (понятно что при условии "=" индекс используется), и можно ли вообще как-то отслеживать используемые индексы? |
|||
1
dimoff
01.12.08
✎
12:44
|
Безусловно использует, отследить легко, создай справочник, заполни его сотней тысяч документов и сделай запрос по дате и неиндексируемому реквизиту типа дата с твоими условиями, увидишь разницу.
|
|||
2
DF_Slayer
01.12.08
✎
13:04
|
Ага, спасибо, так и делаю уже.
|
|||
3
DF_Slayer
01.12.08
✎
13:21
|
Хм, документов 30000, разницы никакой :)
|
|||
4
Sadovnikov
01.12.08
✎
13:23
|
(3) Ты запрос-то целиком покажи.
|
|||
5
H A D G E H O G s
01.12.08
✎
13:32
|
Раз уж пошла такая пьянка, есть кто подскажет - я правильно понимаю, что индекс на поле - это некая таблица с 2-мя колонками: "НомерСтроки", "Значение", в которой хранятся отсортированные значения из индексируемого поля основной таблицы, а также номера их строк.
Сортировка производится при вставке/удалении элемента, поиск - методом бисекции. Ищется номер строки основной таблицы. Это мои фантазии, или в этом есть доля правды? |
|||
6
DF_Slayer
01.12.08
✎
13:42
|
"ВЫБРАТЬ
| ВыгрузкаВБегучку.ДатаНачалаВыхода КАК ДатаНачалаВыхода, | ВыгрузкаВБегучку.Длительность КАК Длительность, | ВыгрузкаВБегучку.Активность КАК Активность, | ВыгрузкаВБегучку.Текст КАК Текст, | ВыгрузкаВБегучку.Картинка КАК Картинка, | ВыгрузкаВБегучку.Выделение КАК Выделение, | ВыгрузкаВБегучку.Рубрика КАК Рубрика, | ВыгрузкаВБегучку.ПодРубрика КАК ПодРубрика, | ВыгрузкаВБегучку.Номер КАК Номер, | ВыгрузкаВБегучку.Регистратор КАК Объявление |ИЗ | РегистрСведений.ВыгрузкаВБегучку КАК ВыгрузкаВБегучку |ГДЕ | ВыгрузкаВБегучку.ДатаНачалаВыхода > &ДатаНачалаВыхода | И ВыгрузкаВБегучку.ДатаНачалаВыхода < &ДатаОкончанияВыхода | |УПОРЯДОЧИТЬ ПО | ДатаНачалаВыхода, | Номер, | Рубрика, | ПодРубрика, | Текст, | Картинка, | Выделение, | Активность, | Длительность |АВТОУПОРЯДОЧИВАНИЕ"; Это весь текст. + к сказанному приведу следующую цитату с одного форума... "Как известно, в ДБФ-версии для индексирования numeric поля применяется выражение STR(поле, длина, точность). К чему это приводит, тоже известно - идя по этому индексу, получаем, что 9 < -1 < 10" |
|||
7
Sadovnikov
01.12.08
✎
13:44
|
(6) Так чего ты от такого запроса хочешь? Естественно, он у тебя по закладкам скачет чтобы данные получить. По этому и не видишь особого ускорения.
|
|||
8
H A D G E H O G s
01.12.08
✎
13:48
|
(7) Типа полный перебор таблицы, вы про это?
|
|||
9
Sadovnikov
01.12.08
✎
13:50
|
(8) По индексу будут отобраны необходимые номера строк. Но, за данными скулю придется лезть в таблицу. То самое "прыгать по закладкам". Эта-то процедура и съест весь выигрыш в скорости, если в выборку попала большая часть таблицы.
|
|||
10
megalodon
01.12.08
✎
13:52
|
(7) "по закладкам скачет" - не поясните, что это означает?
|
|||
11
megalodon
01.12.08
✎
13:54
|
(9) спасибо. только при малой селективности он и не будет "по закладкам скакать", будет использоваться сканирование.
|
|||
12
H A D G E H O G s
01.12.08
✎
13:54
|
(9) Тоесть полного перебора нет. Ок, ну а если интервал выборки - один день?
По поводу (5) - это так? |
|||
13
Sadovnikov
01.12.08
✎
13:55
|
(10) "по закладкам скачет" = Bookmark Lookup. Прости, господи, за мой плохой английский...
|
|||
14
Sadovnikov
01.12.08
✎
13:55
|
(11) А это, смотря чего ему статистика скажет...
Блин, как я сегодня криво выражаюсь... |
|||
15
DF_Slayer
01.12.08
✎
13:58
|
А в каком тогда запросе будет выигрыш?
|
|||
16
megalodon
01.12.08
✎
14:03
|
(15) а что с чем сравниваем?
|
|||
17
DF_Slayer
01.12.08
✎
14:05
|
(16) Запрос с условием больше/меньше на поле типа Дата, с индексом и без.
|
|||
18
megalodon
01.12.08
✎
14:07
|
в общем случае с индексом быстрее, но индекс будет использоваться не всегда - в этих случаях скорость будет одинаковая.
|
|||
19
H A D G E H O G s
01.12.08
✎
14:09
|
(18) Большой Зуб, ты мне скажи, я в (5) прав?
|
|||
20
DF_Slayer
01.12.08
✎
14:11
|
(18) Я вот и пытаюсь выяснить "не всегда" - это когда? :)
|
|||
21
megalodon
01.12.08
✎
14:13
|
(19) вроде прав в некотором приближении. в твоих терминах "Значение" - это хэш индексируемого выражения, а "Номер строки" - это та самая "закладка", то есть физический адрес записи в таблице.
|
|||
22
H A D G E H O G s
01.12.08
✎
14:16
|
(21) А хэш разве можно сравнивать на больше|меньше (поиск бисекцией, там это надо)?
|
|||
23
megalodon
01.12.08
✎
14:17
|
(20) это когда с результирующий набор запроса попадает более какого то процента всех записей таблицы (то есть если в условии запроса передан большой временной интервал). В этом слечае нет смысла определять по индексу "закладку" каждой записи, а потом по нему для каждой записи получать значения остальных полей - выгоднее сразу сканировать таблицу. Но есть например из миллиона записей возвращается одна - лучше по индексу получить ее адрес, а потом - значения остальных полей. Оптимизитор сам все определит, можешь не париться.
|
|||
24
megalodon
01.12.08
✎
14:17
|
(22) ой, там не хэш вовсе, потому что из него можно получить само значения.
|
|||
25
DF_Slayer
01.12.08
✎
14:22
|
(23) Теперь ясно, спасибо!
|
|||
26
H A D G E H O G s
01.12.08
✎
14:24
|
Мне - нет :-)
Ладно - время будет - буду спец. литературу читать. Где - то видел, что индекс формируется на основе бинарного дерева, но вот представить себе такое - не могу :-) |
|||
27
Sadovnikov
01.12.08
✎
14:28
|
(26) А чего именно предстаить не можешь? Каждый символ индекса - веточка, от которой остальные символы-веточки растут :)
|
|||
28
H A D G E H O G s
01.12.08
✎
14:30
|
(27) Ну, и прошел я "от корней, до самых кончиков" © (Head and Sholders). И что получил?
|
|||
29
H A D G E H O G s
01.12.08
✎
14:31
|
(28) P.S. Я - тупой 1С-ник, не забываем..
|
|||
30
Sadovnikov
01.12.08
✎
14:31
|
(28) Номер в строке таблицы получил, которая соответствует индексу :)
|
|||
31
H A D G E H O G s
01.12.08
✎
14:35
|
(30) Номера на самых кончиках хранятся? А в средних узлах - диапазон (перечисление нескольких) номеров, соответствующих условию?
|
|||
32
vde69
01.12.08
✎
14:38
|
(31) алгоритм поиска по индексу:
1 находим в корне дерева первый символ - 2 получаем следующий уровень 3 если уровень последний имеем номер строки в базе, нет - п.1 при такой схеме индексы не надо переформировывать при изменении строки, достаточно "ТОЧЕЧНОЕ" вмешательство |
|||
33
Sadovnikov
01.12.08
✎
14:41
|
(31) На сколько я понимаю, в средних узлах ничего не хранится. В смысле, никаких диапазонов строк там нет.
|
|||
34
vde69
01.12.08
✎
14:43
|
(33) и не может храниться, по тому как строки не храняться диапазонами :)
|
|||
35
H A D G E H O G s
01.12.08
✎
14:56
|
(34) Ладно, еще вопрос:
У меня есть Число. Оно что, преобразуется в строку и посимвольно помещается в дерево индекса? |
|||
36
Sadovnikov
01.12.08
✎
14:59
|
(35) Вот тут почитай:
http://ru.wikipedia.org/wiki/Двоичное_дерево |
|||
37
H A D G E H O G s
01.12.08
✎
15:14
|
(36) Почитал. И все равно не понял, чем поиск/вставка элемента в двоичном дереве отличается от таблицы (5). Это же фактически одно и тоже?
|
|||
38
vde69
01.12.08
✎
15:18
|
(37) это зависит от реализации, но обычно дерево строиться byte, то есть и строка и число рассмативаються как одинаковый тип бинари, хотя есть и строковые индексы
|
|||
39
Sadovnikov
01.12.08
✎
15:21
|
Сидим тут, за теорию перетираем... А у людей, вот, глобальные проблемы:
Условия в запросе при разных типах переменных :) |
|||
40
MSensey
01.12.08
✎
15:36
|
(9) а ниче что в РС кластерный индекс?
|
|||
41
Sadovnikov
01.12.08
✎
15:37
|
(40) Поясни свою мысль?
|
|||
42
H A D G E H O G s
01.12.08
✎
15:39
|
(39) Просто у меня стойкая психологическое неприятие к деревьям после неудачной попытки реализовать B-дерево на Дельфи. :-)
|
|||
43
MSensey
01.12.08
✎
15:43
|
(41) >> Но, за данными скулю придется лезть в таблицу.
Если используется кластреный индекс, то данные в этой же таблице |
|||
44
Sadovnikov
01.12.08
✎
15:54
|
(43) На поле ВыгрузкаВБегучку.ДатаНачалаВыхода построен кластерный индекс? Интересно, почему я в это не верю?
|
|||
45
MSensey
01.12.08
✎
15:58
|
(44) ну автор умлочал о том чем является ДатаНачалаВыхода
Но если взять во внимание фразу "понятно что при условии "=" индекс используется", то можно сказать, что это измерение |
|||
46
MSensey
01.12.08
✎
15:59
|
(45) а не вру - нельзя сказать :)
|
|||
47
Sadovnikov
01.12.08
✎
16:02
|
(45) Вот и я думаю, что измерение. Мне, например, неизвестно, как по измерению можно построть кластерный индекс.
|
|||
48
MSensey
01.12.08
✎
16:06
|
(47) он по умолчанию строится по всем измерениям
|
|||
49
Sadovnikov
01.12.08
✎
16:10
|
(48) Так мы понятия не имеем, в каком порядке у автора идут измерения. И где именно это измерение находтся в индексе. Очень большая вероятность, что не на первом месте.
|
|||
50
MSensey
01.12.08
✎
16:12
|
(49) я писал, что если используется такой индекс.
Вобщем я к тому, что не обязательно за данными полезут в другую таблицу |
|||
51
Sadovnikov
01.12.08
✎
16:13
|
(50) А нееет :)
Ты писал: "а ниче что в РС кластерный индекс?" :) |
|||
52
MSensey
01.12.08
✎
16:42
|
(51) лень было вдаваться в детали ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |