![]() |
|
Модераторы: skyboy |
![]()
|
|
| gribikc |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
Добрый день.
пытаюсь создать каталог с фильтром на подобие того который на сайте СИТИЛИНКА. Сделал 3 таблицы
в таблице `filter` содержатся названия фильтров в таблице `params` содержатся параметры товаров и соответсвующего фильтра Помогите оптимизировать запрос всё что я смог придумать:
-------------------- --------------------------------------------- Заранее спасибо!!! |
||||
|
|||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: нет Всего: 60 |
Это сообщение отредактировал(а) Sanchezzz - 18.9.2012, 21:15 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| gribikc |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
нет не совсем
мой запрос выводит
а этот
у сакуры объём 0.9 Это сообщение отредактировал(а) gribikc - 18.9.2012, 21:48 -------------------- --------------------------------------------- Заранее спасибо!!! |
||||
|
|||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Что вас не устраивает в том, что вы придумали? Добавлено через 3 минуты и 30 секунд индекс по паре params(f_val,id_fil) - единственное, что приходит в голову -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| gribikc |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
то что для каждому фильтру надо будет добавлять следующие
-------------------- --------------------------------------------- Заранее спасибо!!! |
||||
|
|||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
И чем именно это вас не удовлетворяет? Но так вобще... Походу вы сначала определили структуру, а потом задались вопросом, как по ней искать. Правильнее же было бы, мне кажется, для начала решить как должен производиться поиск, а потом под это решение готовить структуру. Если вам к предикатам отбора необходимо применять оператор И, структура с динамически определяемым пользователем набором атрибутов - определенно не самая рациональная. Чем вы можете обосновать необходимость динамического формирования атрибутов? Почему их нельзя разместить непосредственно в столбцах справочника товара? Полагаю ответ прост. Либо вы(возможно как и ваш заказчик) не знаете каков набор атрибутов будет определен для товара, когда продукт поступит в промышленную эксплуатацию. Либо готовите универсальное, гибкое решение на все случаи жизни. В первом случае это недостаток аналитической проработки, во втором случае - утопия. В обоих случаях - попытка сэкномить. А не рациональность - цена этой экономии. Это сообщение отредактировал(а) Zloxa - 19.9.2012, 14:06 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| gribikc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
Не удовлетворяет скорость работы этого дела.
Да действительно сначало была определена структура. Ну а по поводу второго, да действительно делалось универсальное решение -------------------- --------------------------------------------- Заранее спасибо!!! |
|||
|
||||
| Zloxa |
|
||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Придумайте как сделать так, чтобы по IN отбирался наиболее селективный предикат - позволяющий отсечь наибольшее количество значений из справочника товаров. Фильтр по прочим предикатам перепешите на exists. Ну и, соответственно, добейтесь чтобы везде использовался индексный доступ. Ну и ранее озвученный индекс по паре, тоже своих пару копеек внесет. Т.е. если у нас наиболее селективный предикат цвет вина (что, всамделе нифига не так), то запрос будет выглядить как-то так:
Гибкость в велосипедостроении - зло. Единственный компонент в велосипеде, который действительно должен быть гибким - троссик. И то, если бюджет позволяет, лучше вместо троссиков использовать гидравлику. Добавлено через 5 минут и 45 секунд
Нет, для такого запроса будет лучше индекс по тройке (id_fil,f_val,id_tov). Порядок перечисления полей - значим -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||
|
|||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Если требуется осущестлять поиск по диапазону id_fil (использовать для отбора операторы >,<, between), придется строить два индекса. Один для in - по паре (c_val,id_fil), один для exits по тройке (id_to,c_val,id_fil) -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| gribikc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 9.2.2003 Репутация: нет Всего: нет |
нашел решение
с небольшой переделкой базы но суть таже -------------------- --------------------------------------------- Заранее спасибо!!! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |