Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.24;
Скачать: [xml.tar.bz2];




Вниз

Индескация с помощью SQL-запросов. 


Hawk2   (2001-12-21 12:39) [0]

Тут уже был вопрос о индексации, но у меня проблемка иная. Значит есть dbf-файл (используется только для чтения, размер > 5MB) нужно создать индекс по полю (TELA), если создаю с помощью Database Desktop 7 получается индексный файл с расширением ndx (все работает нормально), если создавать с помощью SQLExplorer (CREATE INDEX t_rr_11 ON "t_rr_11.dbf" (TELA)) получается индекс с расширением mdx (тоже работает), но если питаюсь создать индекс в собственном приложении (в компоненте TQuery даю тот же запрос CREATE INDEX t_rr_11 ON "t_rr_11.dbf" (TELA)) выскакивает сообщение:
File or directory not exist
"C:\.....\t_rr_11.mdx"
"C:\.....\t_rr_11.cdx" причем тут индекси если я их еще только питаюсь создать? И еще при создании индексов с помощью SQL-запросов расширение индексов получается в соответствии с типом БД?



Внук   (2001-12-21 14:20) [1]

Дело скорее всего вот в чем: для dbf предварительно был создан индекс (mdx). Затем этот индекс был удален или перемещен в другой каталог. Затем попытка создать индекс через TQuery. Чтобы проиндексировать dbf, его естественно нужно открыть и прочитать (не вручныю разумеется, сам запрос это делает). В заголовке dbf-файла есть байт, где записано, созданы ли для него индексы или нет. Значение байта - созданы (когда создавался mdx), а на самом деле их нет, система ругается. Лечится, по крайней мере, двумя способами - через Database Desktop или ручной правкой заголовка (сам не помню, какой байт).
Ответ на последний вопрос - однозначно.



Hawk2   (2001-12-21 17:14) [2]

Внук ОГРОМНОЕ СПАСИБО за обширное пояснение. Можно задать еще один вопрос: как SQL-запросы работают с индексами? Например у меня есть файл БД и есть к нему индекс. Когда я делаю выборку с помощью SELECT данные выводятся неупорядочеными тоесть существующий индексный файл не принимается во внимание (получается отбор происходит как в неиндексированой базе). И с другой стороны если в операторе SELECT использовать ORDER BY (somefield), то данные выводятся упорядочеными даже при отсутствии индексного файла.



ValeraVV   (2001-12-21 17:51) [3]

В принципе, если есть "order by" кляуза, то SQL всегда сортирует, но если есть индекс, то сортировка происходит быстрее, чем без индекса. Это еще вопрос, использует ли твой драйвер именно твой индекс или нет.



Anatoly Podgoretsky   (2001-12-21 20:32) [4]

SQL использует индексы только для ускорнения запросов, а не для сортировки




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.24;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.019 c
7-75690           Jazzy$                2001-10-10 19:45  2002.01.24  
Выключение монитора.


7-75696           Алексей Саньков       2001-10-05 21:55  2002.01.24  
Как сделать в Винде 256 цветов 640х480 на видюхе Acumos


6-75630           Yuraz                 2001-10-29 09:30  2002.01.24  
Есть URL сайта, какой командой TCP воспользоваться, чтобы узнать чей он, на кого зарегистр. где, когда..


6-75637           amamed_3071           2001-11-03 15:15  2002.01.24  
TCP /IP


3-75492           Killavit              2001-12-18 22:50  2002.01.24  
Индексация Таблиц