ПРИСОЕДИНЯЙТЕСЬ к большой базе данных mysql, которая не помещается в память. - PullRequest
2 голосов
/ 16 октября 2011

JOIN - это удобная функция баз данных SQL, но как насчет больших баз данных (> 10 ГБ).Рассмотрим три (две колонки) таблицы отношения «многие ко многим», так как мы хотим получить элементы, связанные с одним случаем (например, теги ОДНОЙ статьи).

ФАКТЫ (исправьте меня, если я ошибаюсь)): 1. Для JOIN три таблицы должны уместиться в памяти.2. Одиночный SELECT по ПЕРВИЧНОМУ КЛЮЧУ не потребляет память.3. Когда у нас есть много одновременных подключений для чтения, избыточное соединение будет сохраняться в очереди (без выполнения неудачного запроса или перегрузки).

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

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

Ограничение действий простыми запросами SELECT с помощью PRIMARY KEY может быть практичным подходом для эффективной работы с большими базами данных.

Ответы [ 2 ]

4 голосов
/ 16 октября 2011

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

1 голос
/ 16 октября 2011

Индексы могут быть очень полезны для больших баз данных.

Они могут помочь http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm

http://www.tizag.com/mysqlTutorial/mysql-index.php

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

...