Ilya Indigo
Новичок
БД MariaDB 5.5.23
Таблица `table` на движке InnoDB условно имеет, по мимо прочего, поля VARCHAR(32) `f1`,`f2`,`f3`,`f4` и `t`.
Необходимо организовать поиск по этим полям, условно 'search' со следующим, приоритетом вывода...
1 Все записи, где `t`='search'
2 Все записи, где `f1`='search' && `f2`='search' && `f3`='search' && `f4`='search'
3 Все записи, где `f1`='search' || `f2`='search' || `f3`='search' || `f4`='search'
Решаемо примерно так:
Проблема в том, что я не уверен как правильно задать индексы для моего случая.
Нужно задать:
1 Для каждого поля в отдельности?
2 Для `t` и составной для (`f1`,`f2`,`f3`,`f4`)?
3 И для каждого в отдельности, и составной для (`f1`,`f2`,`f3`,`f4`)?
4 Или вы видите как эту задачу можно решить проще (более производительнее и быстрее)?
Пожалуйста помогите расставить индексы или предложите лучшее решение, и обоснуйте выбор
Таблица `table` на движке InnoDB условно имеет, по мимо прочего, поля VARCHAR(32) `f1`,`f2`,`f3`,`f4` и `t`.
Необходимо организовать поиск по этим полям, условно 'search' со следующим, приоритетом вывода...
1 Все записи, где `t`='search'
2 Все записи, где `f1`='search' && `f2`='search' && `f3`='search' && `f4`='search'
3 Все записи, где `f1`='search' || `f2`='search' || `f3`='search' || `f4`='search'
Решаемо примерно так:
Код:
SELECT * FROM `table` WHERE `t`='search' ORDER BY `order` UNION SELECT * FROM `table` WHERE `f1`='search' && `f2`='search' && `f3`='search' && `f4`='search' ORDER BY `order` UNION SELECT * FROM `table` WHERE `f1`='search' || `f2`='search' || `f3`='search' || `f4`='search' ORDER BY `order`;
Нужно задать:
1 Для каждого поля в отдельности?
2 Для `t` и составной для (`f1`,`f2`,`f3`,`f4`)?
3 И для каждого в отдельности, и составной для (`f1`,`f2`,`f3`,`f4`)?
4 Или вы видите как эту задачу можно решить проще (более производительнее и быстрее)?
Пожалуйста помогите расставить индексы или предложите лучшее решение, и обоснуйте выбор