разбиение mysql

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

например у нас есть таблица под названием «адрес» со столбцами «код страны» и «город». поэтому, если я хочу получить все адреса в Нью-Йорке, США, обычно я делаю что-то вроде этого:

select * from address where country_code = 'US' and city = 'New York'

если теперь таблица разделена по «коду страны», и я знаю, что теперь запрос будет выполняться только для раздела, который содержит код страны = США. Мой вопрос: нужно ли явно указывать раздел для запроса в моем выражении sql? или я все еще использую предыдущий оператор, и сервер базы данных автоматически оптимизирует его?

Заранее спасибо!


person Yang    schedule 21.04.2010    source источник


Ответы (2)


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

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

person Jarod Elliott    schedule 21.04.2010

Ответ Джарода правильный и полностью отвечает на вопрос, но я думаю, что не хватает важной части.

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

Если вы изменили свой запрос, чтобы фильтровать только по городу, он не будет использовать только раздел США и будет работать хуже, чем запрос к той же, но не разделенной таблице.

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

person Stephanie Page    schedule 08.06.2010