2012-04-07 3 views
0

У меня есть некоторые проблемы atm, т. Е. У меня есть база данных из нескольких слов, которая равна 900 000, и что я пытаюсь сделать, проверьте, есть ли в ней слово, и если да , верните другое поле в строке.поиск по огромной базе данных

Я получаю тайм-аут, когда я это делаю. Я знаю, что могу изменить таймаут, но то, что я на самом деле хочу, это сделать его как можно быстрее. Мой посетитель не хочет ждать 30 секунд, чтобы получить то, что он ищет.

Я не могу сделать 900 000k статических файлов, потому что у меня есть ограничение inodes на хостинге.

Так что я в значительной степени заперт, поэтому любая вещь, которую я могу сделать, чтобы сделать ее лучше?

Таблица структуры:

ID | Слово | Otherword

CREATE TABLE `database` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`word` text COLLATE utf8_unicode_ci NOT NULL, 
`md5string` text COLLATE utf8_unicode_ci NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=966277 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

Запрос:

mysql_query("SELECT otherword FROM table WHERE word='$word'"); 

Другой запрос:

mysql_query("SELECT word FROM table WHERE otherword='$otherword'"); 

Главный запрос (файл с помощью GET)

$word = $_GET["word"]; 
echo $word; 
$check = mysql_query("SELECT md5string FROM `database` WHERE word='$word'") or  die(mysql_error()); 
while (mysql_num_rows($check)>0) 
{ 
$out = mysql_fetch_array($check); 
$output = $out[0]; 
} 
+2

Пожалуйста, разверните вопрос, чтобы включить структуру таблицы (например, 'SHOW CREATE TABLE yourtable;') и некоторые примеры запросов. –

+0

таблица структура = создать заявление PLS .. – worenga

+0

Готово. Включил его в вопрос. – Kishor

ответ

1

Поиск более 1 миллиона строк в MySQL база данных не должна быть проблема, обеспечивающая вам разумный индекс.

Попробуйте добавить индекс к базе данных, как это (предполагая, что слово, которое вы ищете в колонке на своем собственном):

ALTER TABLE your_word_table ADD KEY(word_column(32)); 

(Editted включить длину ключа, так как получается, что они 're TEXT)

+0

Дело в том, что запросы поступают как для слова, так и для другого поля в базе данных, почти равного по количеству. – Kishor

+0

Итак, добавьте ключи для обеих столбцов? Из ваших выборочных запросов я не вижу проблемы. –

+0

Но это перерыв каждый раз. – Kishor

1

1 миллион не должен составлять 30 секунд. Можете ли вы дать нам свой запрос и структуру таблицы? Попробуйте использовать полнотекстовые индексы для полей. Попробуйте трюки схоже с определением поиска строки с заглавными словами поиска только прописными и т.д.

ALTER TABLE `database` ADD FULLTEXT (
`word` , `md5string`); 
+0

Добавлено в вопрос. Пожалуйста, еще раз проверьте. – Kishor

+0

см. Отредактированный ответ – worenga

+0

Ran that.Still занимает больше 30 секунд для запуска моего запроса. :( – Kishor

2

Добавить fulltex index и использовать MyIsam таблицы, если поиск по более чем обновлению. Othervise добавляет индексы согласно требованию.

1

Это должно сделать ваш поиск быстрым после его завершения. Обновлено, чтобы указать, сколько столбца индексируется, потому что это текстовые поля.

ALTER TABLE `database` ADD INDEX word_idx (слово (32)), ADD INDEX md5_idx (md5string (32))

вы назвали вашу таблицу "базу данных"? Это зарезервированное слово в MySQL и, вероятно, вызовет у вас некоторые головные боли ....

+0

Ха .. Да, я назвал базу данных в таблице. Я был в курсе обучения и узнал, что это зарезервировано. Поэтому я использовал обратные ссылки. В следующий раз я буду следить за зарезервированными словами. – Kishor

+0

Я получаю это когда я пытаюсь выполнить запрос. 'BLOB/TEXT column 'word', используемый в спецификации ключа без ключевой длины. – Kishor

+0

Добавлена ​​ширина индекса столбца. Должно работать. –

Смежные вопросы