Переключение на Главную Страницу Страницы: 1 ... 49 50 [51] 52 53 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 458073 )
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #750 - 21. Ноября 2014 :: 17:06
Печать  
Да, этим занимается движок sqlite.
  
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #751 - 20. Декабря 2014 :: 08:03
Печать  
Ситуация с sqlite 3.8.х прояснилась,
http://www.mail-archive.com/sqlite-users@sqlite.org/msg87754.html
возьмем такой запрос

Код
Выбрать все
SELECT
	СН1.ID [ID1 $Справочник.Номенклатура],
	СН2.ID [ID2 $Справочник.Номенклатура],
	СН3.ID [ID3 $Справочник.Номенклатура]
FROM Справочник_Номенклатура AS СН1
LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
LEFT JOIN Справочник_Номенклатура AS СН3 ON СН2.ID=СН3.ID
 



3.7 использует сырое сканирование по СН1, и индексы СН1.ID и СН2.ID при join`ах. Результат <100мс
3.8 не хочет понимать СН2.ID=СН3.ID т.е. использует только индексы из первой таблицы СН1 Результат >8000мс

Проверяем это так
Код
Выбрать все
SELECT
	СН1.ID [ID1 $Справочник.Номенклатура],
	СН2.ID [ID2 $Справочник.Номенклатура],
	СН3.ID [ID3 $Справочник.Номенклатура]
FROM Справочник_Номенклатура AS СН1
LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
LEFT JOIN Справочник_Номенклатура AS СН3 ON СН1.ID=СН3.ID
 


ЧТД на 3.8 Результат <100мс

Другой вариант - подсказать планировщику sqlite использовать индекс СН2.ID установкой перед ним плюсика.
Код
Выбрать все
SELECT
	СН1.ID [ID1 $Справочник.Номенклатура],
	СН2.ID [ID2 $Справочник.Номенклатура],
	СН3.ID [ID3 $Справочник.Номенклатура]
FROM Справочник_Номенклатура AS СН1
LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
LEFT JOIN Справочник_Номенклатура AS СН3 ON +СН2.ID=СН3.ID
 


на 3.8 Результат <100мс

Итог такой: если не переделают планировщик использовать 3.8.х будет затруднительно, т.к. придется переписывать почти все запросы.

  
Наверх
www  
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: 1sqlite
Ответ #752 - 06. Февраля 2015 :: 08:34
Печать  
alyuev писал(а) 31. Октября 2014 :: 11:42:
Код
Выбрать все
cast(code as float) 

не проходит - не ругается, но возвращает неверное значение для длинных чисел. За решение - Спасибо!


можно попробовать
Код
Выбрать все
cast(code as double) 

или
Код
Выбрать все
code+0.0 

  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: 1sqlite
Ответ #753 - 14. Февраля 2015 :: 02:27
Печать  
в сообщение постоянно выводится "Найдено в кэше".
возвращаю оригинальную компоненту от Орефкова 1.0.2.6 и все нормально.
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: 1sqlite
Ответ #754 - 14. Февраля 2015 :: 02:41
Печать  
Djelf писал(а) 20. Декабря 2014 :: 08:03:
Код
Выбрать все
SELECT
	СН1.ID [ID1 $Справочник.Номенклатура],
	СН2.ID [ID2 $Справочник.Номенклатура],
	СН3.ID [ID3 $Справочник.Номенклатура]
FROM Справочник_Номенклатура AS СН1
LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
LEFT JOIN Справочник_Номенклатура AS СН3 ON СН2.ID=СН3.ID
 




а если попробовать
Код
Выбрать все
SELECT
	СН1.ID [ID1 $Справочник.Номенклатура],
	СН2.ID [ID2 $Справочник.Номенклатура],
	СН3.ID [ID3 $Справочник.Номенклатура]
FROM Справочник_Номенклатура AS СН1
LEFT JOIN Справочник_Номенклатура AS СН2 ON СН2.ID=СН1.ID
LEFT JOIN Справочник_Номенклатура AS СН3 ON СН3.ID=СН2.ID
 


какой результат?
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #755 - 14. Февраля 2015 :: 07:07
Печать  
Asakra писал(а) 14. Февраля 2015 :: 02:27:
в сообщение постоянно выводится "Найдено в кэше".
возвращаю оригинальную компоненту от Орефкова 1.0.2.6 и все нормально.

Да, с отладкой переборшил... Закачай заново из того же сообщения.

Asakra писал(а) 14. Февраля 2015 :: 02:41:
[quote author=Djelf link=1214205575/750#751 date=1419062608]
какой результат?

То же самое будет. Индексы используется только у первой таблицы.
  
Наверх
www  
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: 1sqlite
Ответ #756 - 14. Февраля 2015 :: 07:37
Печать  
Djelf писал(а) 14. Февраля 2015 :: 07:07:
Закачай заново из того же сообщения.


теперь гуд.

Djelf писал(а) 14. Февраля 2015 :: 07:07:
То же самое будет. Индексы используется только у первой таблицы.


лучше проверить. я с индексированными временными таблицами в inner join только так и поступаю, иначе sqlite неверный план строит. делает полный скан таблички, не используя индекс.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #757 - 14. Февраля 2015 :: 08:10
Печать  
Проверил. Как я и говорил - чихать оно на эту перестановку хотело.
  
Наверх
www  
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: 1sqlite
Ответ #758 - 14. Февраля 2015 :: 08:12
Печать  
яфно. жаль.
  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: 1sqlite
Ответ #759 - 23. Февраля 2015 :: 02:58
Печать  
поймал ошибку.
не правильно отрабатывают запросы с условием IN (SELECT val FROM vt)
если это условие изменить на =, то запрос отработает правильно.
vt проверял, заполняется верно.
откатился на оригинальную компоненту.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #760 - 24. Февраля 2015 :: 08:14
Печать  
Ниче не понял   Круглые глаза

Ну вот запрос с условием IN (SELECT val FROM vt)
Код
Выбрать все
|SELECT
	|sn.ID  [Номенклатура :Справочник.Номенклатура]
	|FROM Справочник_Номенклатура as sn
	|WHERE sn.ID IN (SELECT val FROM vt)";
 


все  работает... что в него надо добавить чтобы он не работал?
  
Наверх
www  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 1sqlite
Ответ #761 - 24. Февраля 2015 :: 11:23
Печать  
Это же очевидно - в список уложить мусор..
Смех
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 633
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #762 - 24. Февраля 2015 :: 15:09
Печать  
Eprst писал(а) 24. Февраля 2015 :: 11:23:
Это же очевидно - в список уложить мусор..


Не угадал  Очень довольный

Засунул в список для комплекта еще 900к документов, чем не рандом? Не прокатило...

Можно, например, перед "sn.ID IN" поставить "-"
Теоретически "-" должен отключать использование индекса, но тут оно как то отключает вложенный select вообще, он получается пустой, и это на всех всех версиях sqlite Ужас Красота!

Все не правлино я написал, отключение индекса "+" перед названием переменной.

P.S. где то там у них читал что и как они тестируют. Виртуальные таблицы имеют приоритет ниже плинтуса, а у нас все таблицы 1С виртуальные, а тестирование их соединения с временными таблицами... это наверное уже из области мифологии.
« Последняя редакция: 27. Сентября 2015 :: 13:52 - Djelf »  
Наверх
www  
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: 1sqlite
Ответ #763 - 28. Февраля 2015 :: 16:47
Печать  
Djelf писал(а) 24. Февраля 2015 :: 08:14:
все  работает... что в него надо добавить чтобы он не работал?


точный запрос прилагать не буду. типо того:
Код
Выбрать все
SELECT IDDOC FROM [Регистр.ОстаткиТМЦ] WHERE Номенклатура IN (SELECT val FROM vt_ТМЦ)
Запрос.УложитьОбъекты(ВыбТМЦ,"vt_ТМЦ",0,"Номенклатура"); 



ВыбТМЦ - поле на форме, там выбрана группа
старая компонента возвращала 19 документов, а новая 6
если в поле выбрать элемент или убрать условие, то все работает как надо.
« Последняя редакция: 28. Февраля 2015 :: 18:28 - Asakra »  
Наверх
 
IP записан
 
Asakra
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 83
Местоположение: Иркутск
Зарегистрирован: 28. Августа 2012
Пол: Мужской
Re: 1sqlite
Ответ #764 - 28. Февраля 2015 :: 16:50
Печать  
Eprst писал(а) 24. Февраля 2015 :: 11:23:
Это же очевидно - в список уложить мусор..
Смех


список проверял, там все нормально.
Код
Выбрать все
SELECT val AS [ТМЦ :Справочник.Номенклатура] FROM vt_ТМЦ
Результат.ВыбратьСтроку(); 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 49 50 [51] 52 53 ... 79
ОтправитьПечать