Вопрос о оптимальном алгоритме поиска в БД

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

mogikanin
Сообщения: 20
Зарегистрирован: 20 июн 2007, 13:05

Сообщение mogikanin » 20 июн 2007, 14:49

А у меня результат пустой? :(

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 20 июн 2007, 14:50

mogikanin писал(а):to stix-s у каждой АТС свои правила набора тел. номеров, номера имеют стандартный тип только в том случае если звонки с этих номеров идут через телефонные сети общего пользования, если же вызов идет не через сети ТФОП то номера могут быть и не стандартными, единственное условие - они должны быть уникальными для этой АТС
а тебе нужны внутренние номера этих АТС? :) так на каждой АТС длина номера опять-таки фиксирована :) и определяется емкостью АТС

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 20 июн 2007, 14:52

mogikanin писал(а):А у меня результат пустой? :(
а я не знаю :) ты говоришь не работает - значит пустой :)

mogikanin
Сообщения: 20
Зарегистрирован: 20 июн 2007, 13:05

Сообщение mogikanin » 20 июн 2007, 14:53

select * from test where '8442700550' starting with (test.pref);
результат такого запроса пустой, хотя в базе есть записи у которых префикс = "8442", "844270" :( , может где-то надо пробелы отрезать ? :(

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 20 июн 2007, 14:56

mogikanin писал(а):select * from test where '8442700550' starting with (test.pref);
результат такого запроса пустой, хотя в базе есть записи у которых префикс = "8442", "844270" :( , может где-то надо пробелы отрезать ? :(
база твоя, а про char - varchar я уже говорил :lol:
что там у нас происходит, если длина поля char больше фактического значения, ась? :D
Последний раз редактировалось stix-s 20 июн 2007, 14:58, всего редактировалось 1 раз.

mogikanin
Сообщения: 20
Зарегистрирован: 20 июн 2007, 13:05

Сообщение mogikanin » 20 июн 2007, 14:57

А с Дельфей варчар работать будет нормально?

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 20 июн 2007, 15:00

mogikanin писал(а):А с Дельфей варчар работать будет нормально?
а какая печаль дельфе до какого-то varchar :) у нее string, char, pchar

mogikanin
Сообщения: 20
Зарегистрирован: 20 июн 2007, 13:05

Сообщение mogikanin » 20 июн 2007, 15:02

надоже а с варчар работает :), спасибо.

mogikanin
Сообщения: 20
Зарегистрирован: 20 июн 2007, 13:05

Сообщение mogikanin » 20 июн 2007, 15:05

Странно а разве это не одно и тоже?

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 20 июн 2007, 15:13

mogikanin писал(а):Странно а разве это не одно и тоже?
если про типы данных SQL, используемые в IB/FB почитать, вопрос отпадет сам собой :)

mogikanin
Сообщения: 20
Зарегистрирован: 20 июн 2007, 13:05

Сообщение mogikanin » 20 июн 2007, 15:18

Видимо всетаки там были лишние пробелы

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 20 июн 2007, 15:30

mogikanin писал(а):Видимо все таки там были лишние пробелы
ясно, читать мы не любим :) ну ничего, еще пару раз на эти грабельки наступишь, прочтешь :)

mogikanin
Сообщения: 20
Зарегистрирован: 20 июн 2007, 13:05

Сообщение mogikanin » 20 июн 2007, 15:34

Так читал, Programers Guide стр. 90 Supported Data Types, все одинаково, только чар - фиксированной длины строка, а варчар - переменной и вся разница. Может что-то другое надо было читать?

mogikanin
Сообщения: 20
Зарегистрирован: 20 июн 2007, 13:05

Сообщение mogikanin » 20 июн 2007, 15:39

Все таки пробелы :) http://www.sql.ru/faq/faq_topic.aspx?fid=272

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 20 июн 2007, 15:44

Что-то мне интересно стало как работает starting with наоборот.

При таком раскладе получился натуральный перебор:

Код: Выделить всё

select * from people pp where
'ЛЕНИНА'  starting with(pp.ulica)
и

Код: Выделить всё

select * from people pp where
'ЛЕНИНА В'  starting with(pp.ulica)
А так уже с индексами:

Код: Выделить всё

select * from people pp where
(pp.ulica) starting with 'ЛЕНИНА'  
А так вообще результат отсутствует:

Код: Выделить всё

select * from people pp where
'ЛЕНИНА В'  starting with upper(pp.ulica)

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 20 июн 2007, 16:04

stix-s писал(а):select * from prefixes px
where '83466343126' starting with (px.prefix) - отрабатывает на ура, находит нужный мне префикс, проблема будет, если их будет несколько разной длины 834, 8346, 83466
Не вижу тут проблемы:

Код: Выделить всё

select first 1 * 
  from prefixes px
  where '83466343126' starting with (px.prefix)
  order by char_length(px.prefix) desc
Если там с пробелами - перед определением длины отрезать.

mogikanin
Сообщения: 20
Зарегистрирован: 20 июн 2007, 13:05

Сообщение mogikanin » 20 июн 2007, 16:17

Делаю индекс префикс+маска работать перестает, снова результат пустой, индек удаляю опять работает :(

mogikanin
Сообщения: 20
Зарегистрирован: 20 июн 2007, 13:05

Сообщение mogikanin » 20 июн 2007, 16:20

Зато работает Containing :)

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 21 июн 2007, 07:12

WildSery писал(а):
stix-s писал(а):select * from prefixes px
where '83466343126' starting with (px.prefix) - отрабатывает на ура, находит нужный мне префикс, проблема будет, если их будет несколько разной длины 834, 8346, 83466
Не вижу тут проблемы:

Код: Выделить всё

select first 1 * 
  from prefixes px
  where '83466343126' starting with (px.prefix)
  order by char_length(px.prefix) desc
Если там с пробелами - перед определением длины отрезать.
естессно, вот это и проблема - дополнительная сортировка
можно еще дополнительное поле в префиксы ввести, с длиной префикса и по нему сортировать :) всяко можно, но я пошел другим путем :)
пробелы резать - может проще их сразу не создавать? :)

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 21 июн 2007, 07:13

mogikanin писал(а):Зато работает Containing :)
экспериментатор, блин :)

Ответить