2015-12-03 1 views
0

Мы работаем с рекламной сетью и имеем некоторые проблемы с производительностью в последнее время.Какое расположение MySQL в моем случае верно?

Таблица решений проблемы является таблица "щелкает" с колонками: click_id int, affiliate_id int, campaign_id int, country_id int, time datetime.

Все наши чтения и вставки имеют country_id в предложении WHERE.

Фактически клики из одной страны всегда блокируют полный стол для каждой другой страны. Это не обязательно и замедляет нашу работу.

Уважаемые профессионалы MySQL, могу ли я понять, что разбиение таблицы кликов на country_id - отличное решение для нас?

Я читал об этом в mysql manual

Но я не уверен, но которые Разметка Тип бы подходит для наших нужд.

Какой из них вы бы порекомендовали и почему?

+0

зависит от того, какие запросы вы делаете с этой таблицей. Но, скорее всего, разделить по дате - вы можете легко удалить/архивировать старые элементы. – Marki555

+0

Что вы думаете об идее сделать раздел для каждой страны? – Benjamin

+0

- это распределение страны? Если половина данных является, например, США, вы не выиграете от разделения по странам. – Marki555

ответ

0

Не используйте PARTITION просто потому, что считаете, что это может ускорить процесс. Это не так.

Есть только 4 случая (что я знаю), где PARTITIONing ускорит систему. Мои blog обложек, в деталях, сбросив «старые» данные в качестве одного из полезных дел, а также упоминают другие 3.

Я надеюсь, что ваш country_id является 2-байтами «код страны», а не 4 байта INT ,

Это черт click_id?

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

Я могу видеть no использовать для разбиения на country_id.

«7 дней плюс« старше »» - есть проблема с этим. Завтра вы захотите перенести данные дня на большой «старый» раздел. Это включает REORGANIZE PARTITION, который скопирует все из категории «старше». Слишком медленно и блокирует всю таблицу. Я сделал это, но я должен был убедиться, что есть «окно обслуживания», во время которого я мог это сделать.

Все наши чтения и вставки имеют country_id в предложении WHERE.

Давайте посмотрим некоторые типичные SELECTs. У них всегда есть GROUP BY day? Если да, то сводные таблицы для каждого дня могут быть оправданы. Это сильно разгрузит деятельность SELECT в таблице фактов и переместит ее в меньшую, лучшую индексированную сводную таблицу (таблицы). another blog.