|
|
|
| У меня есть такой запрос
SELECT
id AS ARRAY_KEY, table.*
FROM table
WHERE
AND (col1 = 'all' OR col1 LIKE '%|1|%')
AND (col2 = 'all' OR col2 LIKE '%|2|%')
AND (col3 = 'all' OR col3 LIKE '%|7|%' OR col3 LIKE '%|8|%' OR col3 LIKE '%|3|%')
AND id_ads NOT IN(1,2,3)
|
В колонках col1 и col2 находятся списки ID строки типа
|1|2|7|6|7|
b по ним выполняется выбор. Вопрос можно ли как то по другому организовать структуру, потому что колонок на самом деле больше. Или возможна ли оптимизация. Потому что мне кажется, что не правильно я спроектировал.
Я думал над вариантом, что составить Для каждой колонки отдельную таблицу. Но тогда ведь в этом запросе много объеденений, и выиграю ли я при этом. Так как данный запрос выполняется очень часто. | |
|
|
|
|
|
|
|
для: Gendalf
(13.02.2010 в 17:53)
| | Реализуется как отношение многие-ко-многим (many-to-many , M:N) через одну дополнительную таблицу связи.
таблица связи | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 19:45)
| | я про это и писал, но таблиц то будет не одна, а на каждую колонку тогда. и это получится очень много объединений. Есть ли выигрыш в такой реализации? | |
|
|
|
|
|
|
|
для: Gendalf
(13.02.2010 в 21:01)
| | linkTable(
main_table_object_id,
atribute_name_id,
attribute_value_id)
описываемый объект кодирован main_table_object_id,
имя доп колонки кодировано atribute_name_id,
значение доп колонки кодировано atribute_value_id
Всё.
4 таблицы, 3 поля в таблице связи. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2010 в 21:32)
| | Выдержит ли сервер такой запрос с объединением таблиц, запрос будет выполнятся около миллиона раз в сутки. Записей правда в этой таблице будет максимум тысячи 3-4. | |
|
|
|
|
|
|
|
для: Gendalf
(13.02.2010 в 21:38)
| | Это вопрос к серверу.
Сомневаюсь, что с LIKE будет легче. | |
|
|
|