|
v7: 1sqlite одновременно условие на вхождение и невхождение - нормально? | ☑ | ||
---|---|---|---|---|
0
palpetrovich
08.12.15
✎
15:10
|
кусок кодика
|WHERE isfolder=2 and ismark <> '*' |AND id in (select val from СписокТоваров) |AND id NOT in (select val from СписокИсключаемыхТоваров) или лучше предварительно СписокТоваров очистить от СписокИсключаемыхТоваров? |
|||
1
varelchik
08.12.15
✎
16:17
|
|AND
( id in (select val from СписокТоваров) |OR id NOT in (select val from СписокИсключаемыхТоваров)) |
|||
2
Гёдза
08.12.15
✎
16:21
|
можно и предварительно, но не факт что быстрее будет
|
|||
3
palpetrovich
08.12.15
✎
16:25
|
(1) а че OR-то?
|
|||
4
orefkov
08.12.15
✎
16:26
|
Зависит скорее всего от размера списка исключаемых товаров.
Скорее всего, особой разницы по времени выполнения не будет. Однако зависит еще и от версии sqlite. Вроде видел на 1С++ форуме - кто-то подхватил разработку и выпускает версии с более свежим sqlite. |
|||
5
palpetrovich
08.12.15
✎
16:28
|
(3) + - вон оно че... не разобрался сразу :)
|
|||
6
palpetrovich
08.12.15
✎
16:29
|
(4) список исключаемых товаров, конечо, будет поменьше списка товаров ...но про точный размер никто заранее не скажет :)
|
|||
7
orefkov
08.12.15
✎
16:30
|
(5)
to be or not to be :) |
|||
8
Абыр
08.12.15
✎
16:45
|
(0) "авторский" 1sqlite, емнип, не использует индекс для in
|
|||
9
palpetrovich
08.12.15
✎
16:47
|
(8) и что? не заморачиваться с 1sqlite? решать методами 1с?
вообще говоря я, скорее всего, гланды рву через ж. :) тут я получаю СписокИсключаемыхТоваров текст="SELECT |ParentExt [Владелец :Справочник.Отделы], |Спр.Товар [Товар :Справочник.Номенклатура] |FROM [Справочник.ТоварыПоОтделам] Спр |WHERE ismark <> '*' |AND ParentExt in СписокОтдел |Group by ParentExt, Спр.Товар"; а тут уже его использую текст="SELECT |id [Товар :Справочник.Номенклатура], |code Код |FROM Товары |WHERE isfolder=2 and ismark <> '*' |AND id in (select val from СписокТоваров) |AND id NOT in (select val from СписокИсключаемыхТоваров)"; наверное это можно сделать в одном запросе? |
|||
10
orefkov
08.12.15
✎
16:55
|
(8)
Не "авторских 1sqlite не использует", а "sqlite для виртуальных таблиц не использует" :) Чтобы использовал, надо запрос переписывать: select ... from СписокТоваров left join Справочник_Номенклатура on val=id Правда, не всегда использование индекса оправдано в этом случае. Если список большой - проще раз по таблице пробежаться и проверить вхождение в список, чем кучу раз по индексу скакать. |
|||
11
Гёдза
08.12.15
✎
17:08
|
(10) а что оптимизатора в склайт нет? )))
|
|||
12
orefkov
08.12.15
✎
17:11
|
(11)
Есть. Но для своих таблиц. А к 1Совским он через механизм "виртуальных таблиц" стучится, которые менее оптимизируемы. Собственно, sqlite совершенно ничего не знает ни про дбф, ни про индексы к нему. Это моя компонента обеспечивает. |
|||
13
orefkov
08.12.15
✎
17:12
|
||||
14
Абыр
08.12.15
✎
17:55
|
(10) доработанный Djelf'ом уже использует, но там и движок унутре уже другой версии)
(9) как уже написали, можно загонять список в отдельную таблицу и делать джойн |
|||
15
Djelf
09.12.15
✎
19:11
|
(4) Да, пытаюсь обновлять до текущей версии.
Низкий поклон за открытый код! Сделанный объем работ для прикручивания к 1с просто ужасает. Внешние базы sqlite прямо панацея для файловой 7ки в случаи всяких интеграций, не знаю как бы я по другому выкручивался! (0) С in поаккуратнее, он нормально работает только на движке sqlite 3.8.+, на движке 3.7.17 как оказалось глючит, а на более старых версиях тормоза почти обеспечены т.к. индекс не использует. Дал бы ссылки, но ветка на 1с++ по sqlite сломалась, и пароль тоже сломался и не приходит на newmail.ru. |
|||
16
Djelf
09.12.15
✎
19:43
|
Вот последняя моя сборка на движке sqlite 3.8.11.1 https://cloud.mail.ru/public/CYZn/cSN7ivTNe
Там пара микрофиксов к 1sqlite (типизация неопределенного значения длиной 23, и что то еще), и слегка изменен планировщик 1sqlite для более адекватного поведения в 3.8.11 Но если 1sqlite 1.0.2.4 работает, то лучше не трогать ;) Планировщик в 3.8.11+ иногда строит безумные планы запросов. Это решаемо, но разница в скорости может быть в 100-1000 раз. P.S. 3.8.11+ потому что в 3.8.0 был сломан планировщик для виртуальных таблиц (читаем таблиц 1с), а в 3.8.11 его починили. |
|||
17
Злопчинский
09.12.15
✎
20:12
|
(16) Спасибо за поддержание допрасширений клюшек! как бы мы без них..
|
|||
18
orefkov
09.12.15
✎
22:34
|
(15)
Тебе спасибо! Всегда радует, что хоть кто-то смог разобраться в твоем коде :) А то иногда сам через пол-года уже не понимаешь, что написал. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |