Black Rabbit
Новичок
Оптимизация очень большой базы для поиска
Всем привет!
Помогите пожалуйста решить проблему
Есть база данных продукции, каждый продукт помимо общих для всей продукции свойств (цена, название. фото) обладает собственным набором характеризующих его параметров. Эти параметры сгруппированы по категориям, их число не фиксировано. Что-то вроде http://market.yandex.ru/model.xml?hid=9149...;modelid=898029, только конечно намного примитивнее
Структура базы примерно такова
products: (например Siemens C75)
id - уникальный айди продукта
price - цена
..... - прочие параметры
options - категория, из которой данный продукт считывает свойства (options_categories.id )
options_categories
id - уникальный айди категории
title - название категории (например мобильные телефоны)
options
id - уникальный айди своиства
cat_id - айди категории (options_categories.id )
title - название свойства (например Тип корпуса)
type - тип своиства (чекбокс, селектбокс, текстбокс)
search - флаг, указывающий использовать ли данное свойство для поиска по продукции
options_filled
pid - айди продукта (products.id )
oid - айди свойства (options.id )
value - чему равно у данного продукта данное свойство
Если речь идет просто об отображении информации о конкретном продукте или списка продукции,
такая организация работает на ура. Проблемы возникают на этапе поиска
На основании таблицы options генерируется поисковая форма, выборка идет из options_filled
Запрос поступает из формы в виде набора пар oid - value
Array
(
[26] => n
[29] => 10
[33] => 0
)
После чего делаю запрос примерно такого вида
select* from options_filled where (oid='26' and value='0') or (oid='29' and value>='10') or (oid='33' and value='0') group by oid,pid
Таблица options_filled может содержать свыше 700 000 записей.... Предыдущий запрос всего лишь на 119,232 выполнялся 0.35 сек.... Можно ли как-то оптимизировать поиск?
У меня есть идея сделать индексацию базы - написать скрипт, который будет раз в несколько дней выгребать инфу и раскладывать ее по другим таблицам, например для каждой категории создавать свою таблицу и выгребать в нее только те свойства, по которым должен идти подбор. Интересно, делает так кто-нибудь?
Всем привет!
Помогите пожалуйста решить проблему
Есть база данных продукции, каждый продукт помимо общих для всей продукции свойств (цена, название. фото) обладает собственным набором характеризующих его параметров. Эти параметры сгруппированы по категориям, их число не фиксировано. Что-то вроде http://market.yandex.ru/model.xml?hid=9149...;modelid=898029, только конечно намного примитивнее
Структура базы примерно такова
products: (например Siemens C75)
id - уникальный айди продукта
price - цена
..... - прочие параметры
options - категория, из которой данный продукт считывает свойства (options_categories.id )
options_categories
id - уникальный айди категории
title - название категории (например мобильные телефоны)
options
id - уникальный айди своиства
cat_id - айди категории (options_categories.id )
title - название свойства (например Тип корпуса)
type - тип своиства (чекбокс, селектбокс, текстбокс)
search - флаг, указывающий использовать ли данное свойство для поиска по продукции
options_filled
pid - айди продукта (products.id )
oid - айди свойства (options.id )
value - чему равно у данного продукта данное свойство
Если речь идет просто об отображении информации о конкретном продукте или списка продукции,
такая организация работает на ура. Проблемы возникают на этапе поиска
На основании таблицы options генерируется поисковая форма, выборка идет из options_filled
Запрос поступает из формы в виде набора пар oid - value
Array
(
[26] => n
[29] => 10
[33] => 0
)
После чего делаю запрос примерно такого вида
select* from options_filled where (oid='26' and value='0') or (oid='29' and value>='10') or (oid='33' and value='0') group by oid,pid
Таблица options_filled может содержать свыше 700 000 записей.... Предыдущий запрос всего лишь на 119,232 выполнялся 0.35 сек.... Можно ли как-то оптимизировать поиск?
У меня есть идея сделать индексацию базы - написать скрипт, который будет раз в несколько дней выгребать инфу и раскладывать ее по другим таблицам, например для каждой категории создавать свою таблицу и выгребать в нее только те свойства, по которым должен идти подбор. Интересно, делает так кто-нибудь?