Быстрый поиск в 500 таблицах

Тема в разделе "Базы данных", создана пользователем Rigor, 25 дек 2012.

Модераторы: latteo
  1. Rigor

    Rigor

    Регистр.:
    1 июн 2008
    Сообщения:
    202
    Симпатии:
    33
    Такая проблема, не могу придумать как сделать быстрее.

    Есть 500 таблиц одной структуры в бд MySql. В каждой табилце в среднем по 1500 записей. Нужно для каждой позиции одной(выбранной из 500) таблицы сделать поиск по остальным 499 таблицам.

    Как сделать лучше(т.е. быстрее) соединить все таблицы с помошью sql запроса(типа SELECT * FROM и тут перечислить все таблицы) и искать в ней, либо искать в каждой таблице отдельно и сохранять результаты в один массив?

    Заранее спасибо, надеюсь, понятно объяснил
     
  2. Leony

    Leony

    Регистр.:
    18 мар 2008
    Сообщения:
    153
    Симпатии:
    25
    Можно использовать хранимые процедуры.

    Этой я пользуюсь для поиска по всей БД

    Вызывать так: CALL find_overall('имя_БД','шо_ищем');
     
    antiterror нравится это.
  3. Arnor

    Arnor Создатель

    Регистр.:
    5 фев 2009
    Сообщения:
    36
    Симпатии:
    12
    Насолько часто данные будут изменяться? Возможно стоит покопать в сторону Sphinx и создания индекса для поиска.
     
  4. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    В среднем у вас данных меньше чем на миллион. Для базы данных это не много. Если данные не часто обновляются можно и общую таблицу с нужными данными сделать.
    Либо составить большой запрос через UNION ALL (без ALL работает медленнее, почитайте разницу) - работает так же быстро, я бы остановился на нем. Единственно, нужно потюнить настройки mysql, в частности запись table_open_cache.

    А вообще пробуйте, тестируйте, и оптимизируйте :)
     
  5. Funaki

    Funaki

    Регистр.:
    26 июн 2008
    Сообщения:
    151
    Симпатии:
    16
    Всё правильно делаешь, только зачем соединять все таблицы, а потом уже искать, лучше - соединяй все результаты, т.е. в каждый запрос к каждой таблице добавляй своё условие, и между собой union (all) и всё