2010-04-21 4 views
2

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

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

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

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

Заранее благодарен!

ответ

1

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

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

4

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^