![]() |
|
Модераторы: skyboy |
![]()
|
|
| gid |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.5.2005 Где: Россия Репутация: нет Всего: нет |
Здравствуйте, суть проблемы такая: есть таблица с ~90.000 записей, которая имеет следующую структуру:
Запрос:
выполняется по 10-15 секунд. Может есть какой способ ускорить выборку данных с помощью оптимизации запроса\таблицы? Основной тормоз этого запроса как я понимаю, является `category_2` LIKE '%бумага%', но чем его заменить даже не представляю... т.к. в поле category_2 могут содержаться и 'черная бумага' и 'цветная бумага'.... Всю голову уже изломал, но ничего реально работающего так и не придумал... ps поиск по форуму ничего дельного не дал... |
||||
|
|||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
нормализовть можно?
попробуй EXPLAIN своему запросу сделать. Добавлено через 13 секунд нет, не надо EXPLAIN, все равно бесполезно. уж больно запрос нагружающий. при данному использовании индексы не помогут. разве что - полнотекстовые. Добавлено через 2 минуты и 42 секунды самый простой "костыль": заменить like на locate но, как мне кажется, проблему это не решит. тут бы структуру базы переделать как-то, чтоб подобных запросов избежать |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
замените на
Не суть, конечно, но по крайней мере покороче будет... а вот с Like, который и есть основной тормоз, без полнотекста по полю ничего не сделать... PS. Неужели это `category_2` не формализуется? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Komatoz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 2.7.2004 Где: Ю-Сахалинск Репутация: нет Всего: нет |
С таким кол-вом записей врядли что поможет..
только если качество сети и оборудование улучшать Это сообщение отредактировал(а) Komatoz - 24.12.2007, 08:16 |
|||
|
||||
| gid |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.5.2005 Где: Россия Репутация: нет Всего: нет |
Akina, спасибо! Прирост производительности за счет использования `category` IN (...) получился весьма значительный... теперь запрос выполняется уже не 15 секунд а 3-7 секунды!
На счет формализации нужно подумать, но пока вот что придумал: Для поля category_2 создать отдельную таблицу (что-то похожее на индекс), в которой будет всего два поля: id_записи - для указания в первой таблице все_возможные_названия_этой_категории - для создания нового запроса и при запросе сперва делать выборку по таблице с категориями, а на основании уже полученных данных делать запрос по основной таблице с точным указанием нужных категорий... думаю будет работать значительно быстрее. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Вполне достаточно указания связывания с такой таблице и выполнения отбора по ней сразу в результирующем запросе. Тем более что выделение этого поля в отдельную таблицу позволит построить по ней полнотекстовый индекс. Впрочем, явное указание использования индекса в запросе еще никогда не вредило...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |