-
-
> [0] Alex_C (25.11.11 10:04)
Вопрос неправильный. Для locate надо вытащить ВСЕ записи на клиента в ОЗУ, он может и треснуть от этого - и канал загрузишь, и ОЗУ. А вот SELEСT FROM WHERE отработает на сервере по индексам, если есть подходящие, или полным перебором. Клиенту остаётся только получить результат.
-
Что быстрее работает: запрос SELEСЕ FROM WHERE или метод Locate?
А разве не очевидно? Для того, чтобы случился локейт, надо сначала чтобы случился селект по которому будет сделан локейт.
-
> Alex_C (25.11.2011 10:04:00) [0]
Измерить, кстати можешь сам
-
что быстрее движется: поезд или человек в нем?
вопрос не корректный в принципе, хотя... в принципе можно настроить режим когда Locate использует индексы базы, и только для jet. (по аналогии с поездом делаем условие, пассажир поезда идет по перрону, поезд двигается в пределах вокзала)
-
кстати "индексированная база"... это как? может таблица? рекордсет образ таблицы/части ее на клиенте, индексов с собой "не тянет", но может построить его в у себя, на локали, в памяти.
-
Да вопрос задал не корректно. Поправлюсь: есть очень принципиальный участок программы, в котором скорость поиска очень важна. По этому есть 2 варианта поиска по таблице: 1. SELECT FROM WHERE 2. Где-то в начале программы определить SELECT * FROM, а потом уже только делать Locate. Естественно что нужно найти только 1 запись - таблица индексирована и совпадения по индексу не допускаются.
-
> [6] Alex_C (25.11.11 11:10)
Если данные меняются редко, а поиск выполняется часто, то, может, и имеет смысл сделать что-то типа локального кэша, выбрав сначала все записи. Но в общем случае оптимальней вариант 1
-
> clickmaker © (25.11.11 11:13) [7]
Не согласен. Как-то писал одну программулину, в которой нужно было искать инфу из справочников для одного большого рекордсета. изначально делал мелкими Select... работало, но очень долго. Переделал на "выбрал все из справочника"+ locate - время сократилось в ... даже трудно сказать, во сколько раз. Были часы, стало 10-15 минут. СУБД MS SQL 2000
-
> Переделал на "выбрал все из справочника"+ locate
я об этом и говорил. Справочники меняются редко, их можно и нужно кэшировать
-
> Виталий Панасенко (25.11.2011 11:43:08) [8]
А у меня мелкими Select < 10 ms
-
"мелкими Select" это неправильно, т.к. множественно число..., должен быть 1 Select который возвращает нужное, дальше поиск по нему не требуется, делается просто обработка в цикле (если нужно по записьно).
-
Alex_C (25.11.11 11:10) [6] 1 вариант серверный, т.е. будет работать со многими клиентами. (логику имею ввиду а не движок) 2 вариант чисто локальный, и в в принципе бессмысленный... т.к. говоришь поиск по ключу... тогда быстрее всего будет использовать серверный курсор (аналог прямой работы, как файл сервер, для аксесс) и использовать процедуры индексного поиска (локейт тоже использует индекс, если он есть, но определение есть он или нет тоже время занимает, ну и не помню я на который он ориентируется, скорее всего на "в рекордсете", не учитывая "особых" настроек)
-
> использовать серверный курсор
Это имеется ввиду CursorLocation := clUseServer?
> использовать процедуры индексного поиска
Это какие?
-
Seek
только смотри, переход на файл серверную логику, с компонентами-технологией "заточенной" под клиент серверную, это не просто "функцию вызвать" это меняет идеологию работы с базой. причем т.к. здесь это(файл сервер) сделано в виде исключения то знать тебе нужно и то и то, и правила и исключения , иначе будешь постоянно "а че оно глючит/не работает? я все же правильно сделал". а ты вон даже справку не читаешь...
-
-
> Seek
> а ты вон даже справку не читаешь..
Я тебя удивлю - я не просто читаю, я очень внимательно читаю. Ибо Seek - не работает кроме как на Table - читай документацию. Пробовал уже его. Выдало ошибку - внимательно прочел документацию - так и есть. Без обид - правда читал документацию и Seek пробовал. Может чего не так делал?
-
Текущий поставщик не поддерживает необходимый интерфейс для функции Index. Ответ на использование Seek.
-
> читай документацию. пинг понг какой то... мне как бы уже не нужно, в этом... по этому, я как бы уже сам могу написать.
> внимательно прочел документацию - так и есть. так и нет. или внимательность исправляй. или справку свою в утиль, и новую ищи.
> Без обид какие обиды? просто, раз не хочешь, то прекращаем. если спрашиваешь, то слушай, если вместо этого начинаешь "лечить" отвечающих, ну значит сам разберешься. а то стараешься, чуть ли не лекцию про идеологию написал, а он единственное что понял, так это про справку. а функцию как есть бездумно "запуздырил"...
> Может чего не так делал? а ты сомневаешься?
|