[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ORDER BY FIELD (PostgreSQL и MySQL)
Kusss
В общем есть такая проблема.

Есть большой поиск , который ищет по нескольким таблицам одновременно. И есть идея на первые позиции вывести поиск по конкретной таблице.

Моя реализация такая:
1) Ищем в нужной таблице позиции '3434','8989','5780'
2) В большом поиске используем ORDER BY FIELD

вот простой пример для понимания принципа.
SELECT id, `NAMEP` FROM `table` where `NAMEP` LIKE '%химстрой%'  ORDER BY FIELD(`id`,'3434','8989','5780') DESC; 

Работает, но медленно. Так как индексы Mysql не понимает.

Кто что может предложить для увеличения скорости ?
P.S. Рассмотрю вариант для PG, я его не знаю, но просто хочется для себя знать.
S.Chushkin
Большой(!) поиск с LIKE '%...%'. Ну-ну, флаг тебе в руки.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Kusss
да это для примера, и большой здесь много таблиц
Игорь_Vasinsky
Цитата
Так как индексы Mysql не понимает.

да ну http://www.mysql.ru/docs/man/MySQL_indexes.html

Индексы используются для того, чтобы:

Цитата
Быстро найти строки, соответствующие выражению WHERE.
Извлечь строки из других таблиц при выполнении объединений.
Найти величины MAX() или MIN() для заданного индексированного столбца. Эта операция оптимизируется препроцессором, который проверяет, не используете ли вы WHERE key_part_4 = константа, по всем частям составного ключа < N. В этом случае MySQL сделает один просмотр ключа и заменит выражение константой MIN(). Если все выражения заменяются константой, запрос моментально вернет результат:
SELECT MIN(key_part2),MAX(key_part2) FROM table_name where key_part1=10
Производить сортировку или группирование в таблице, если эти операции делаются на крайнем слева префиксе используемого ключа (например ORDER BY key_part_1,key_part_2). Если за всеми частями ключа следует DESC, то данный ключ читается в обратном порядке (see section 5.2.7 Как MySQL оптимизирует ORDER BY).


Внимание на
Производить сортировку или группирование в таблице

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sergeiss
Цитата (Kusss @ 5.10.2018 - 13:18)
Есть большой поиск , который ищет по нескольким таблицам одновременно.

Результат поиска какой, большой? Много строк всего? И сколько из них относятся к искомым айдишникам?

Цитата (Kusss @ 5.10.2018 - 13:18)
1) Ищем в нужной таблице позиции '3434','8989','5780'

У тебя в примере это как-то "не очевидно" smile.gif Они есть в ORDER BY, но не в фильтре.

И еще вопросы.

* Эти позиции (эти номера) всегда будут такие или они могут быть каждый раз (в каждом запросе) разные?


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.