Назад | Перейти на главную страницу

MySQL и мощность индекса

У меня есть таблица MyISAM в базе данных MySQL на сервере Ubuntu 10.04 с 256 МБ ОЗУ. Максимальный размер пакета - 32 МБ. В таблице 150 000 строк.

Таблица состоит из трех столбцов, два из которых относятся к типу ТЕКСТ. Я создаю индекс FULLTEXT для обоих из них; один индекс имеет мощность, равную количеству строк в таблице, а другой - только одну треть.

Это почему?

Означает ли низкий индекс мощности, что MATCH () AGAINST () будет пропускать совпадения? (Кажется, так.) Если да, могу ли я увеличить лимит памяти где-нибудь, чтобы увеличить мощность моего индекса?

могу ли я увеличить лимит памяти где-нибудь, чтобы увеличить мощность моего индекса

А? Нет. Количество элементов - это количество уникальных значений в данных, деленное на общее количество значений в таблице - изменение объема доступной памяти не изменит ваши данные.

Как говорит AndrewQ, использование стоп-слов для большей избирательности в отношении того, что индексируется, может иметь большое влияние на показатель количества элементов - и, следовательно, на оптимизацию запросов, однако FULLTEXT-индексирование - очень грубый инструмент для поиска текста.

Конечно, здесь не так много памяти (я предполагаю, что это виртуальная машина), что повлияет на общую производительность.

Если вы думаете, что что-то не так, воспользуйтесь утилитой myisam_ftdump для проверки индексов. Количество элементов зависит от того, сколько разных слов содержится в полях ТЕКСТ.

Вы не указали содержимое полей, поэтому ответ не является уникальным.

Кроме того, если вы еще не создали /etc/mystopwords файл MySQL использует встроенный список игнорируемых слов. Этот список зависит от сопоставления и может давать ложные результаты, если сопоставление столбцов отличается от значения по умолчанию.

Даже тип запроса может привести к странным результатам.

В заключение, количество элементов не является проблемой, пока вы не узнаете, что в индексах чего-то не хватает.