Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация селекта 
:(
    Опции темы
azesmcar
Дата 10.3.2005, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Здравствуйте...есть select
Код

SELECT I.* FROM ITEMS I, CATS C
WHERE POSITION(:FULLPATH IN C.FULLPATH) = 1
AND C.ID = I.CATID


Это примерно что то вроде дерева...
Например есть категория MP3, в ней категории Шансон, Рок и Классика...
Если параметр :FULLPATH равен 1_2_ это значит что нужно показать все Рок-и. Если 1_ то все что попадает под категорию MP3, т.е. Шансон, Рок, Классику и так далее...
SELECT написан но работает медленно, как его можно оптимизировать, или по другому написать...или индексы поставить на таблицу...вобщем все что угодно...
СУБД: MySQL
IDE: Borland C++Builder 6.0 Enterprise
Driver: ODBC через ADO
PM   Вверх
Hroft
Дата 10.3.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: нет
Всего: 3



Если я не ошибаюсь, то лучше всего будет генерить в зависимости от этого самого fullpath в программе условия, которые вместо (position(...) = 1) будут содержать что-то типа (id=шансон or id=рок or ...). По-моему, так.
PM MAIL ICQ   Вверх
azesmcar
Дата 10.3.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Это может быть иерархия типа
CD->MP3->Chanson->Avtorskiy->Xoroshiy->OchenXoroshiy ...и так далее...
не думаю что если сгенерировать селект where id='Xoroshiy' or id='OchenXoroshiy' и тому подобное по такой вот иерархии он станет работать быстрее...т.е. работает он нормально, но записей в таблице много (около 25000)...но я попробую, хотя этот вариант мне немного не нравиться, у меня для этого компонент написан. не хочеться привязывать его к общей программе...не универсально...а писать этот сорс генерации на каждой форме где стоит компонент тоже как то не особо интересно...в любом случае спасибо...
Будут еще предложения???
PM   Вверх
Hroft
Дата 11.3.2005, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: нет
Всего: 3



Слушай, а что мешает прям в виде дерева и хранить?
Структуру базы придется поменять, но зато точно будет соответствовать описываемой структуре. Атрибуты - key(PK), id и pid (parent id).
Словами чет не могу сформулировать, но вот такой запрос, коли я с синтаксисом вложенных селектов не наврал, должен тогда довольно неплохо решить задачу.
Код
select key,pid as id3 from (select key,pid as id2 from (select key,id, pid as id1 from mp3 where id=OchHor) where id1=Hor) where id2=Auth;

и т.д.
Мне кажется, можно и еще намного лучше сделать. Но вот базу менять...
PM MAIL ICQ   Вверх
azesmcar
Дата 11.3.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Вложенным селектом я бы эту задачку давно решил, но тут проблема..MySQL не разрешает вложенных селектов...не менять же базу данных? честно говоря я одну ошибку в компоненте нашел, из за нее селект работал раза в 2 медленней, но это уже исправлено...открываеться где то около 2,3 секунд...хотелось бы еще немного...если в MySQL можно сделать вложенные селекты то как??
PM   Вверх
Hroft
Дата 12.3.2005, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: нет
Всего: 3



Иерархию View'ов создавать, и из последнего выбирать.
То же самое получается. Но эти временные вьюшки могут еще сильнее затормозить, хотя их можно создавать только при первом обращении, или же что-то типа инициализации сделать. Вот только их штук 500 получится... Но вообще, с помощью view удобно эмулировать вложенные селекты.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.