Переключение на Главную Страницу Страницы: 1 ... 10 11 [12] 13 14 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 480242 )
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #165 - 01. Июля 2008 :: 14:05
Печать  
JohnyDeath писал(а) 01. Июля 2008 :: 14:00:
Или я уже что-то не понимаю, или...
Вот запрос к таблице движений:
Код
Выбрать все
SELECT

КатегорияБланка,
Количество*(1-2*debkred) as Количество

FROM Регистр_БСО__Склад

WHERE
	(DATE+TIME) BETWEEN
		'20080101' AND '200801315CWG00' 


Выдаёт 0 строк, хотя движения были. Пробывал дополнять пробелами:
Код
Выбрать все
'20080101	' AND '200801315CWG00' 


Всё равно пусто.

Вместо (DATE+TIME) надо писать (DATE||TIME), плюс просто складывает, а || - это конкантенация строк
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #166 - 01. Июля 2008 :: 14:06
Печать  
Ага, всё нормально! Спасиб!  Подмигивание
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #167 - 02. Июля 2008 :: 06:58
Печать  
orefkov писал(а) 30. Июня 2008 :: 06:57:
Артур, в версии 1.0.1.7 для выгрузки результатов запросов я сделал спец-интерфейс. См. resultloader.h
Если для ИТЗ реализуете этот интерфейс, то компонента сможет выгружать и в ИТЗ.

Ага, вижу.
Леха Диркс пока занят, я сам займусь, постараюсь на этой или следующей неделе сделать.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #168 - 02. Июля 2008 :: 07:15
Печать  
artbear писал(а) 02. Июля 2008 :: 06:58:
orefkov писал(а) 30. Июня 2008 :: 06:57:
Артур, в версии 1.0.1.7 для выгрузки результатов запросов я сделал спец-интерфейс. См. resultloader.h
Если для ИТЗ реализуете этот интерфейс, то компонента сможет выгружать и в ИТЗ.

Ага, вижу.
Леха Диркс пока занят, я сам займусь, постараюсь на этой или следующей неделе сделать.


Если будет выгрузка в ИТЗ, то часть операций, когда SQLLIte ведет себя неоптимально - группирование,
соединение по неиндексным полям - можно проводить уже с ИТЗ - т.е. производительность повысится.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #169 - 02. Июля 2008 :: 07:26
Печать  
kiruha писал(а) 02. Июля 2008 :: 07:15:
часть операций, когда SQLLIte ведет себя неоптимально - группирование,
соединение по неиндексным полям - можно проводить уже с ИТЗ - т.е. производительность повысится.

ИМХО, из ИТЗ может понадобиться только метод "Группировать".
Остальное можно разрулить в 1sqlite при помощи временных таблиц с индексами.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #170 - 02. Июля 2008 :: 07:36
Печать  
steban писал(а) 02. Июля 2008 :: 07:26:
kiruha писал(а) 02. Июля 2008 :: 07:15:
часть операций, когда SQLLIte ведет себя неоптимально - группирование,
соединение по неиндексным полям - можно проводить уже с ИТЗ - т.е. производительность повысится.

ИМХО, из ИТЗ может понадобиться только метод "Группировать".
Остальное можно разрулить в 1sqlite при помощи временных таблиц с индексами.

ИМХО как раз метод ИТЗ::Группировать ИМХО не очень оптимален по расходу памяти и времени работы Печаль Хотя, конечно, очень удобный и качественный метод Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #171 - 02. Июля 2008 :: 07:43
Печать  
Подскажите, пожалуйста, как попасть в индекс DATETIME таблицы движения регистра, который = DTOS(DATE)+TIME+IDDOC+STR(LINENO,4)+STR(ACTNO,6)
Так:
Код
Выбрать все
SELECT *
FROM Регистр_БСО__Склад
WHERE
		     DATE||TIME BETWEEN
		'20080101	' AND '200801315CWG00' 


не попадает.
Так:
Код
Выбрать все
SELECT *
FROM Регистр_БСО__Склад
WHERE
		     DTOS(DATE)+TIME BETWEEN
		'20080101	' AND '200801315CWG00' 


ругается, что нет ф-ии DTOS.
Какой индекс строит 1sqlite для этой таблицы?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #172 - 02. Июля 2008 :: 07:48
Печать  
Код
Выбрать все
SELECT *
FROM Регистр_БСО__Склад
WHERE
		DATE BETWEEN '20080101' AND '20080131'
AND idx_DATE_TIME_IDDOC_LINENO_ACTNO BETWEEN '20080101	' AND '200801315CWG00'
 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #173 - 02. Июля 2008 :: 07:50
Печать  
steban писал(а) 02. Июля 2008 :: 07:48:
Код
Выбрать все
SELECT *
FROM Регистр_БСО__Склад
WHERE
		DATE BETWEEN '20080101' AND '20080131'
AND idx_DATE_TIME_IDDOC_LINENO_ACTNO BETWEEN '20080101	' AND '200801315CWG00'
 


Самое то! Спасибо!
ТОлько условие
Код
Выбрать все
DATE BETWEEN '20080101' AND '20080131' 

мне кажется лишним. Или нет?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #174 - 02. Июля 2008 :: 07:52
Печать  
JohnyDeath писал(а) 02. Июля 2008 :: 07:50:
Самое то! Спасибо!
ТОлько условие
Код
Выбрать все
DATE BETWEEN '20080101' AND '20080131' 

мне кажется лишним. Или нет?

Вот как раз это условие обеспечивает попадание в индекс.
А по полю idx_тырыпыры.. индекса нет.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #175 - 02. Июля 2008 :: 07:58
Печать  
steban писал(а) 02. Июля 2008 :: 07:52:
Вот как раз это условие обеспечивает попадание в индекс.
А по полю idx_тырыпыры.. индекса нет.

а мне на запрос:
Код
Выбрать все
SELECT *
FROM Регистр_БСО__Склад
WHERE
		    idx_DATE_TIME_IDDOC_LINENO_ACTNO BETWEEN '20080101' AND '200801315CWG00' 


отладка вот это показала:
Цитата:
Подбор индекса для таблицы RA5966:
     Ограничения: DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]>=; DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]<=;
     Найдено в кэше
     Выбран индекс DATETIME: DTOS(DATE)+TIME+IDDOC+STR(LINENO,4)+STR(ACTNO,6)
     Стоимость: 16

т.е. типа попали.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #176 - 02. Июля 2008 :: 08:15
Печать  
Да, точно. Улыбка
И план выполнения и время выполнения одинаковые.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #177 - 02. Июля 2008 :: 08:27
Печать  
Использование поля вида idx_DATE_TIME_IDDOC_LINENO_ACTNO не решает проблему
ключа с двумя полями входящими в один индекс ? :

orefkov писал(а) 24. Июня 2008 :: 10:00:
При таком простом условии (сравнение по одному полю, входящему в индекс), будет очень хорошо:
двинет по индксу, отсчитает нужное количество записей.

При ключе с двумя полями входящими в один индекс, все гораздо хуже. Для MSSQL у Дмитро применяется сейчас такая конструкция:
Код
Выбрать все
where field1 > 'key1' or (field1 = 'key1' and field2 > 'key2')
 


MSSQL нормально понимает такую запись, двигает по индексу.
SQLite - во-первых выражения, объединенные по OR не оптимизирует, только по AND.
Во-вторых, с константами не работает (те он все равно не поймет, что в обоих подусловиях одинаковый 'key1')

Если переписать условие вот так:
Код
Выбрать все
where field1 >= 'key1' AND NOT (field1 = 'key1' AND field2 <='key2')
 


то SQLite для начала двинет по индексу на 'key1', потом будет идти по индексу, проверяя каждую запись на NOT (field1 = 'key1' AND field2 <='key2')
Это конечно несколько оптимальнее, но все равно не то, чего бы хотелось. А если еще и по первому полю селективность низкая, вообще хреново.
К сожалению, умение составлять английские предложения - не сильная моя черта, а то бы давно им фичереквест написал.

  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #178 - 02. Июля 2008 :: 09:56
Печать  
Саш, проект не собирается в ВС6:
1. В utex.h ненужный инклюд #include <fixalloc.h>
2. В SQL_DBF.rc также ненужный инклюд #include "l.rus\afxres.rc"

Поправишь?

ЗЫ без этих строк проект нормально собирается.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #179 - 02. Июля 2008 :: 11:02
Печать  
artbear писал(а) 02. Июля 2008 :: 06:58:
orefkov писал(а) 30. Июня 2008 :: 06:57:
Артур, в версии 1.0.1.7 для выгрузки результатов запросов я сделал спец-интерфейс. См. resultloader.h
Если для ИТЗ реализуете этот интерфейс, то компонента сможет выгружать и в ИТЗ.

Ага, вижу.
Леха Диркс пока занят, я сам займусь, постараюсь на этой или следующей неделе сделать.

http://cvs.alterplast.ru/bugs/show_bug.cgi?id=3953
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 10 11 [12] 13 14 ... 79
ОтправитьПечать