ischuplev
Новичок
Есть таблица товаров, в ней 1,699,196 записей (MyISAM)
Есть дерево разделов, и дерево групп - это 2 разные таблицы
Нужно сделать выборку, выбрать товары из раздела 1 и группы 1 и отсортировать по цене.
Я сделал дополнительную таблицу, чтобы не JOIN-ить где храню несколько записей по 1 товару, например, есть товар находиться в
разделе 1 (id:1)
- подразделе 1 (id:2) (-тут)
и в группе:
группа 1 (id:1)
- группа 2 (id:2) (-тут)
то получается запись:
ну и т.д.
сама таблица, сейчас в ней 15,023,616 записей:
Делаю выборку
- все быстро
- 0.562сек
По этому запросу получается 164119 записей
Сейчас разделов 37, групп 12
Планируется разделов около 500-1000, групп около 5000 - соответственно таблица еще разрастется в разы больше, боюсь, что дальше будет хуже.
Что можете посоветовать?
Правильно ли я сделал, что создал дополнительную таблицу, чтобы не джойнить?
Как вы фильтруете и сортируете большие выборки из таблиц?
Есть дерево разделов, и дерево групп - это 2 разные таблицы
Нужно сделать выборку, выбрать товары из раздела 1 и группы 1 и отсортировать по цене.
Я сделал дополнительную таблицу, чтобы не JOIN-ить где храню несколько записей по 1 товару, например, есть товар находиться в
разделе 1 (id:1)
- подразделе 1 (id:2) (-тут)
и в группе:
группа 1 (id:1)
- группа 2 (id:2) (-тут)
то получается запись:
Код:
id_товара|id_раздела|id_группы|active|price |
1 |1 |1 |yes |1000.00|
1 |2 |1 |yes |1000.00|
1 |1 |2 |yes |1000.00|
1 |2 |2 |yes |1000.00|
сама таблица, сейчас в ней 15,023,616 записей:
Код:
CREATE TABLE IF NOT EXISTS `table` (
`section_id` int(15) NOT NULL,
`group_id` int(15) NOT NULL,
`catalog_id` int(15) NOT NULL,
`active` enum('yes','no') NOT NULL DEFAULT 'no',
`price` decimal(14,2) NOT NULL DEFAULT '0.00',
PRIMARY KEY (`section_id`,`group_id`,`catalog_id`),
KEY `sortPrice` (`section_id`,`group_id`,`active`,`price`,`catalog_id`),
KEY `catalog_id` (`catalog_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Код:
SELECT * FROM table WHERE section_id=1 AND group_id=1 AND active='yes' ORDER BY price LIMIT 12
Код:
SELECT * FROM table WHERE section_id=1 AND group_id=1 AND active='yes' ORDER BY price LIMIT 100000,12
По этому запросу получается 164119 записей
Сейчас разделов 37, групп 12
Планируется разделов около 500-1000, групп около 5000 - соответственно таблица еще разрастется в разы больше, боюсь, что дальше будет хуже.
Что можете посоветовать?
Правильно ли я сделал, что создал дополнительную таблицу, чтобы не джойнить?
Как вы фильтруете и сортируете большие выборки из таблиц?