2009-08-25 8 views
1

Вот проблема: у меня есть база данных mysql houuge (ну на моем уровне) с техническими продуктами. У меня есть что-то вроде 150k рядов продуктов в моей базе данных плюс 10-20 других таблиц с таким же количеством строк. Каждая таблица содержит множество критериев. Некоторые из критериев - это текстовые значения, некоторые - десятичные, некоторые - только логические. Я хотел бы предоставить веб-доступ (php) к этой базе данных с фильтрами по каждому критерию, но я не знаю, как это сделать очень быстро. Я начал создавать большую таблицу с объединением всех количеств, чтобы избежать множественного соединения, это круто, быстрее, чем большое объединение, но все же очень медленно. Ввод индекса по всем критериям, не улучшает ситуацию (и я слышал, что это была плохая идея). Мне было интересно, есть ли классные алгоритмы, которые могли бы помочь мне предварительно обработать поиск по нескольким критериям. Есть идеи ?Алгоритм поиска нескольких критериев

Спасибо заранее.

+1

Возможно, нормализация базы данных может помочь? – nlucaroni

+0

Это база данных MySQL? – Toto

ответ

0

Попробуйте полнотекстовый поиск Вы можете попробовать глобирование текстовые поля вместе и делать full text search.

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

Использование объяснения плана Поскольку вы не указали свой SQL или таблицу, я не могу быть более конкретным. Но используйте команду Explain Plan, чтобы убедиться, что ваши запросы поражают индексы, а не выполняют сканирование таблицы. Это может быть сложно, поскольку тонкие вещи, такие как порядок столбцов в запросе, могут повлиять на то, работает ли индекс.

+0

Спасибо за ответ. Я пробовал много вещей с оптимизацией запросов, но я начинаю думать, что sqlquerying таблица непосредственно с моими фильтрами не является частью решения. Я имею в виду, мои запросы sql выглядят действительно очень тяжелыми, множеством условий, множеством критериев. Кроме того, полный текстовый поиск означает, что вы знаете значение, которое вы ищете, но я играю с фильтрами: критерии - это значение в пределах диапазона, а не точное значение. BTW мои продукты являются механическими точными деталями (шестерни, винт, болт и т. Д.). – 2009-08-26 07:50:27

1

Если вы расстроены, пытаясь сделать это в SQL, вы можете взглянуть на Lucene. Он позволяет выполнять поиск по диапазону, полный текст и т. Д.

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