MySQL разделение - PullRequest
       18

MySQL разделение

2 голосов
/ 21 апреля 2010

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 08 июня 2010

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

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

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

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

1 голос
/ 21 апреля 2010

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

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

...