Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема попасть в индекс... (число прочтений - 2607 )
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
попасть в индекс...
29. Декабря 2008 :: 16:26
Печать  
есть регистр
#==TABLE no 209    : Регистр Банк
# Name    |Descr                         |Type[A/S/U]|DBTableName|ReUsable  
T=RG1547  |Регистр Банк                  |A          |RG1547     |1        
#-----Fields-------
# Name      |Descr               |Type|Length|Precision
F=PERIOD    |Period Registr      |D   |8     |0        
F=SP1550    |(P)Фирма            |C   |9     |0        
F=SP1549    |(P)Расчетныйсчет    |C   |9     |0        
F=SP1551    |(P)счет             |C   |9     |0        
F=SP1552    |(P)сумма            |N   |14    |2        
#----Indexes------
# Name     |Descr         |Unique|Indexed fields                                              |DBName    
I=PROP     |PERIOD+PROP   |0     |PERIOD,SP1550,SP1549,SP1551                                 |PROP      

Запрос не попадающий в индекс :
                 |SELECT sum($рег.сумма) as summa from $Регистритоги.Банк as рег
                 |where рег.period=:ДатаНачала1~~
                 |and $рег.фирма=:фирма1"+
                 ?(ПустоеЗначение(рс)=1,"","
                 |and $рег.Расчетныйсчет=:Расчетныйсчет
                 |") ;
выполняется 1.7 сек

запрос (как я понимаю попадающий в индекс)
                 |SELECT sum($рег.сумма) as summa from $Регистритоги.Банк as рег
                 |where DTOS(рег.period)+$рег.фирма+$рег.Расчетныйсчет+$рег.Счет
                 |=   Счет",":Расчетныйсчет+$рег.Счет")+"

выполняется 2.5 сек
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: попасть в индекс...
Ответ #1 - 29. Декабря 2008 :: 17:37
Печать  
Если имеется ввиду vfoledb
Проверить правильно ли подключение
Код
Выбрать все
глОлеДБ = СоздатьОбъект("OLEDBData");
	Рез=глОлеДБ.Соединение("
	|Provider=VFPOLEDB.1;
//	|Deleted=Yes;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN=""""");
	ОледбКоманда=глОлеДБ.СоздатьКоманду();
	ОледбКоманда.Выполнить("Exec('SET ANSI OFF')"); 



После этого
Цитата:
запрос (как я понимаю попадающий в индекс)
                |SELECT sum($рег.сумма) as summa from $Регистритоги.Банк as рег
                |where DTOS(рег.period)+$рег.фирма+$рег.Расчетныйсчет+$рег.Счет
                |=    DTOS(:ДатаНачала1~~)+:фирма1+"+?(ПустоеЗначение(рс)=1,"$рег.Расчетныйсчет+$рег.
Счет",":Расчетныйсчет+$рег.Счет")+"

Исправить на
Цитата:
|SELECT sum($рег.сумма) as summa from $Регистритоги.Банк as рег
|where DTOS(рег.period)+$рег.фирма+$рег.Расчетныйсчет+$рег.Счет
|=    DTOS(:ДатаНачала1~~)+:фирма1+"+?(ПустоеЗначение(рс)=1,"",":Расчетныйсчет")+"


а то  и в левой и в правой части было переменная $рег.Счет ,$рег.Расчетныйсчет - просто какое то уравнение )
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: попасть в индекс...
Ответ #2 - 29. Декабря 2008 :: 18:46
Печать  
пробовал.
выдает пустую выборку.
щас попробую ОледбКоманда.Выполнить("Exec('SET ANSI OFF')");
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: попасть в индекс...
Ответ #3 - 29. Декабря 2008 :: 19:00
Печать  
kriblya писал(а) 29. Декабря 2008 :: 18:46:
пробовал.
выдает пустую выборку.
щас попробую ОледбКоманда.Выполнить("Exec('SET ANSI OFF')");


ОледбКоманда.Выполнить("Exec('SET ANSI OFF')") - обязательно.
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: попасть в индекс...
Ответ #4 - 29. Декабря 2008 :: 19:13
Печать  
похоже попал.
     |SELECT sum($рег.сумма) as summa from $Регистритоги.Банк as рег
|where DTOS(рег.period)+$рег.фирма+$рег.Расчетныйсчет+$рег.Счет
|like    DTOS(:ДатаНачала1~~)+:фирма1+'__________________'";
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: попасть в индекс...
Ответ #5 - 29. Декабря 2008 :: 19:15
Печать  
Exec('SET ANSI OFF');
|SELECT sum($рег.сумма) as summa from $Регистритоги.Банк as рег
|where DTOS(рег.period)+$рег.фирма+$рег.Расчетныйсчет+$рег.Счет
|=    DTOS(:ДатаНачала1~~)+:фирма1+"+?(ПустоеЗначение(рс)=1,"",":Расчетныйсчет")+"

дает пустую выборку...
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: попасть в индекс...
Ответ #6 - 29. Декабря 2008 :: 19:30
Печать  


А
kriblya писал(а) 29. Декабря 2008 :: 19:13:
похоже попал.
     |SELECT sum($рег.сумма) as summa from $Регистритоги.Банк as рег
|where DTOS(рег.period)+$рег.фирма+$рег.Расчетныйсчет+$рег.Счет
|like    DTOS(:ДатаНачала1~~)+:фирма1+:Расчетныйсчет+'_________'";

что дает? (при рс- не пустое)
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: попасть в индекс...
Ответ #7 - 29. Декабря 2008 :: 19:37
Печать  
kriblya писал(а) 29. Декабря 2008 :: 19:15:
Exec('SET ANSI OFF');
|SELECT sum($рег.сумма) as summa from $Регистритоги.Банк as рег
|where DTOS(рег.period)+$рег.фирма+$рег.Расчетныйсчет+$рег.Счет
|=    DTOS(:ДатаНачала1~~)+:фирма1+"+?(ПустоеЗначение(рс)=1,"",":Расчетныйсчет")+"

дает пустую выборку...

Буквально это так ?
Код
Выбрать все
глОлеДБ = СоздатьОбъект("OLEDBData");
	Рез=глОлеДБ.Соединение("
	|Provider=VFPOLEDB.1;
//	|Deleted=Yes;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN=""""");
	ОледбКоманда=глОлеДБ.СоздатьКоманду();
	ОледбКоманда.Выполнить("Exec('SET ANSI OFF')");
	 ТекстЗапроса="
|SELECT sum($рег.сумма) as summa from $Регистритоги.Банк as рег
|where DTOS(рег.period)+$рег.фирма+$рег.Расчетныйсчет+$рег.Счет
|=    DTOS(:ДатаНачала1~~)+:фирма1+"+?(ПустоеЗначение(рс)=1,"",":Расчетныйсчет")+"
|";
ТЗ=ОледбКоманда.ВыполнитьИнструкцию("ТекстЗапроса");
ТЗ.ВыбратьСтроку();
 

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


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: попасть в индекс...
Ответ #8 - 29. Декабря 2008 :: 19:54
Печать  
прошло.
время выборки твоего варианта и варианта с like примерно одинаково.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: попасть в индекс...
Ответ #9 - 29. Декабря 2008 :: 20:17
Печать  
kriblya писал(а) 29. Декабря 2008 :: 19:54:
прошло.
время выборки твоего варианта и варианта с like примерно одинаково.

Так и должно быть - алгоритм обработки драйвером одинаковый.
Второй вариант для соединений Join - там Like не удается использовать.
И вроде немного покороче и покрасивше в where
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать