Будут ли другие таблицы MySql замедлять поиск в базе данных MySql? - PullRequest
0 голосов
/ 13 октября 2010

У меня есть сайт объявлений, и я немного подумываю о редизайне базы данных.

В настоящее время у меня есть 7 таблиц в db .Одна таблица для каждой « ОСНОВНАЯ КАТЕГОРИЯ ».Например, у меня есть таблица " VEHICLES ", которая содержит всю информацию о следующих категориях объявлений:

   cars
   mc
   mopeds/scooters
   trucks
   boats
   etc etc

Однако пользователи на сайте обычно ищут в специфических категорий.Например, пользователь выбирает категорию « cars » для поиска и вводит ключевое слово.

Мой код сегодня будет искать во всей таблице VEHICLES для все записи с полем " категория ", равным "автомобилям", а затем получить их данные:

 "SELECT * IN vehicles WHERE category='cars' AND alot of other conditions" // just for example, not tested

Я думаю о создании таблицы сейчас, длякаждая из этих «подкатегорий».То есть один для автомобилей, один для mc, один для грузовиков и т. Д., Чтобы поиск не осуществлялся с помощью информации, которая не нужна.

Увеличит ли это скорость поиска?Потому что я рассчитал, что для этого мне понадобится не менее 30 таблиц.

Спасибо

Ответы [ 4 ]

4 голосов
/ 13 октября 2010

При правильно проиндексированной таблице и «разумном» количестве строк вы не получите большой скорости при таком подходе.Все, что вы выиграете в скорости выполнения, вы потеряете во время выхода на рынок, потому что ваше программирование станет более сложным.

Не выполняйте эту оптимизацию до тех пор, пока не столкнетесь с проблемой производительности при тестировании с представительным наборомданные.

1 голос
/ 13 октября 2010

Оптимизация производительности - это столько же искусство, сколько наука, и чтобы действительно понять, что является лучшим вариантом, необходимо провести некоторый тест;тот, кто предлагает точный ответ, учитывая имеющуюся информацию, просто неправ.Тем не менее, несколько мыслей о вашей ситуации:

  • Вы не говорите, какой тип столбца вашей категории сейчас, но если это строковый тип, он, вероятно, использует больше места, чем другие параметрытаким образом, делая таблицу больше.Правильная индексация может очень сильно помочь со скоростью, но большая таблица с большими индексами всегда будет работать наоборот:

  • Как уже упоминалось кем-то еще, ваши запросы в категории будутбыстрее в простом случае поиска категории.Насколько быстрее зависит от того, сколько данных у вас есть в вашей текущей таблице, и увеличение может быть сведено на нет, если вам нужно объединиться в другие таблицы, чтобы удовлетворить потребность во всех других условиях, на которые вы ссылались.ОТО, на самом деле это может ускорить процесс в определенных случаях объединения (например, если вы выполняли самостоятельные объединения со своей всеобъемлющей таблицей).

  • Если вы много работаетеразделение данных на несколько таблиц может значительно облегчить резервное копирование.

  • Разделение на несколько таблиц также может облегчить разделение данных на нескольких серверах по соображениям производительности.Точно так же это может упростить работу настроек репликации.

  • Если вы отслеживаете данные, относящиеся к конкретной категории, отдельные таблицы позволяют лучше нормализовать базу данных и, вероятно, повысить производительность.в результате использования намного меньших таблиц.

  • Разбиение, очевидно, означает изменение вашего кода.Если ваш код старого, скрипучего типа, вы вполне можете добиться увеличения производительности от очистки.Конечно, есть риск, что вы что-то сломаете ...

  • Проверьте свои индексы.Плохие показатели являются очень распространенной причиной плохой работы, но их относительно легко исправить, потратив немного времени на самообразование.EXPLAIN MySQL может сказать вам, используют ли ваши запросы индексы, а статистика индекса (смотрите в документации) может сказать вам, насколько эффективно работают ваши индексы.

  • Наконец, говоря о кодепроверь.Попробуйте поэкспериментировать с несколькими подходами, независимо от того, как настроена база данных.Например, может быть быстрее выполнить пару отдельных запросов и объединить результаты в коде, чем выполнить объединение в базе данных.Точно так же часто в коде быстрее выполняется что-то вроде сортировки, особенно в тех случаях, когда объединение или что-то еще означает, что базе данных потребуется создать временный файл / таблицу.Опять же, проверьте вывод EXPLAIN, и если вы не можете устранить проблемную область в своих запросах, посмотрите, поможет ли это упростить запросы и выполнить больше работы в коде.Это может быть особенно полезно в общем случае, когда веб-сервер имеет больше ресурсов, чем сервер базы данных.

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

1 голос
/ 13 октября 2010

Это увеличит скорость поиска в той же категории.Это потенциально может замедлить запросы, когда вам нужна совокупная информация из разных категорий.Вам нужно решить, какой вариант лучше подходит для вашего сайта.

Сколько записей у вас в общей сложности в таблице транспортных средств.Вполне вероятно, что добавление правильных индексов значительно увеличит скорость ваших запросов.

Проверьте параметр запроса «EXPLAIN» в MySQL.Понимание этого поможет вам оптимизировать базу данных с помощью индексов.

0 голосов
/ 13 октября 2010

если вы используете php, попробуйте что-то вроде

$ query = mysql_query ($ sql); while ($ row = mysql_fetch_assoc ($ query)) { $ Tempvalue [] = $ строки; }

, а затем в цикле информации использовать как предложение

foreach ($ tempvalue как $ key => $ value) { напиши таблицу ..... }

Может быть, MySQL не медленно, и проблема в коде

тест, никого не убивай =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...