У меня есть таблица MyISAM в базе данных MySQL на сервере Ubuntu 10.04 с 256 МБ ОЗУ. Максимальный размер пакета - 32 МБ. В таблице 150 000 строк.
Таблица состоит из трех столбцов, два из которых относятся к типу ТЕКСТ. Я создаю индекс FULLTEXT для обоих из них; один индекс имеет мощность, равную количеству строк в таблице, а другой - только одну треть.
Это почему?
Означает ли низкий индекс мощности, что MATCH () AGAINST () будет пропускать совпадения? (Кажется, так.) Если да, могу ли я увеличить лимит памяти где-нибудь, чтобы увеличить мощность моего индекса?
могу ли я увеличить лимит памяти где-нибудь, чтобы увеличить мощность моего индекса
А? Нет. Количество элементов - это количество уникальных значений в данных, деленное на общее количество значений в таблице - изменение объема доступной памяти не изменит ваши данные.
Как говорит AndrewQ, использование стоп-слов для большей избирательности в отношении того, что индексируется, может иметь большое влияние на показатель количества элементов - и, следовательно, на оптимизацию запросов, однако FULLTEXT-индексирование - очень грубый инструмент для поиска текста.
Конечно, здесь не так много памяти (я предполагаю, что это виртуальная машина), что повлияет на общую производительность.
Если вы думаете, что что-то не так, воспользуйтесь утилитой myisam_ftdump
для проверки индексов. Количество элементов зависит от того, сколько разных слов содержится в полях ТЕКСТ.
Вы не указали содержимое полей, поэтому ответ не является уникальным.
Кроме того, если вы еще не создали /etc/mystopwords
файл MySQL использует встроенный список игнорируемых слов. Этот список зависит от сопоставления и может давать ложные результаты, если сопоставление столбцов отличается от значения по умолчанию.
Даже тип запроса может привести к странным результатам.
В заключение, количество элементов не является проблемой, пока вы не узнаете, что в индексах чего-то не хватает.