|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Индексы при использовании компонентов Query
Здравствуйте, может мне кто-нибудь доступным языком объяснить, как использовать индексные файлы для таблиц (скажем .dbf), если для доступа к данным используются компоненты query?
Есть у меня задача: из более чем 300 тыс. записей в таблице .dbf выбрать те, которые не повторяются (в моей таблице есть дубли) и перенести их, скажем, в текстовый файлик. Если запись уже были ранее, и я нашёл дубль, то, их в файлик не помещать. Логику всего этого безобразия я вроде как придумал, использую два компонента ApolloQuery и вроде всё хорошо, но работает программа жутко медленно. Умом я понимаю, что для таких операций таблица должна быть проиндексирована. Допустим, у меня есть индексные файлы. В компонентах TTable есть свойство IndexName и что-то там ещё про индексы, в принципе, можно указать, я так понимаю, по какому полю идут индексы и, видимо, таким образом, прикрутить индексные файлы к задаче, но как поступать, если используются компоненты query? Надо ли как-то указывать, что файл таблицы имеет индекс? Если да, то как? Интернет пестрить теорией про индексы, базы данных и пр., но ответа на свой вопрос я так и не нашёл. Помогите советом |
#2
|
||||
|
||||
а если попробовать вот такой запрос вместо 2х твоих
Код:
SELECT t1.id, t1.name FROM tablitsa t1 WHERE (SELECT COUNT(t2.id) FROM tablitsa t2 WHERE t2.name = t1.name) = 1 Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#3
|
|||
|
|||
Цитата:
Я, конечно, попробую, вопрос, правда, заключался не в этом, а в том, как использовать индексы при работе с query... И меня осенило, что скорее всего ни как, ибо query используется в основном для создания клиент-серверных приложений, следовательно, всю работу с таблицами, в том числе и открытие и использование индексных файлов, берёт на себя СУБД. А у меня таблица локальная и запросы SQL сильно тормозят обработку, так что я переделал программу под использование Apollo Table |
#4
|
||||
|
||||
При запросе драйвер доступа к БД будет смотреть на имеющиеся индексы к таблице. Насколько я помню, для DBF логика такая - если никакой сортировки не задано, то будет использован PK-индекс или при отсутствии такового первый из имеющихся индексов. Если сортировка имеет место быть, то используется индекс по полю в сортировке. А вот если используется для сортировки какое-то сложное выражения я уже не помню как он поступает.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
childeroland (10.06.2013)
|
#5
|
|||
|
|||
Цитата:
|
#6
|
|||
|
|||
Цитата:
совсем обалдел??? Как ты думаешь, сколько такой корелирующий запрос будет выполняться? Вообще, для этого в SQL есть специальное ключевое слово - distinct. Запрос Код:
select distinct f1, f2, f3, ... from t |