Форум: "Базы";
Поиск по всему сайту: 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.027 c
1-75562           vsu                   2002-01-05 15:00  2002.01.24  
Прокрутка в RichEdit


4-75717           Miwa                  2001-11-13 09:53  2002.01.24  
Windows Media Player


1-75586           RealGrey              2002-01-05 16:36  2002.01.24  
Не могу понять ощибку.


1-75547           Yuraz                 2002-01-04 19:13  2002.01.24  
Не получается стереть рисунок с формы, делаю так:


3-75490           Mistr                 2001-12-20 14:12  2002.01.24  
Сервер-интервейс