Разбиение и подвыборы - PullRequest
       9

Разбиение и подвыборы

0 голосов
/ 03 апреля 2011

У меня проблема с разбиением на разделы и подзапросами (mysql 5.1). Точно, когда я выполняю select с помощью subselect, mysql пропускает разбиение. И я не понимаю почему. Точно, у меня есть одна секционированная таблица, как это:

CREATE TABLE parted_table (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(20)
) PARTITION BY KEY() PARTITIONS 20;

Запрос выглядит так:

select * from parted_table where id in (select col_fk from other_table);

И explain partitions показывает, что при выборе выше используются все 20 разделов, даже если этот подвыбор возвращает только одно значение. Это вызвано тем, что mysql не знает результирующий набор подвыбора во время оптимизации запроса?

Что я должен сделать, чтобы получить разбиение в данном примере?


Редактировать: Я обнаружил ошибку, учитывая именно эту проблему (http://bugs.mysql.com/bug.php?id=22765). Это было исправлено в 2008 году, но это было исправлено в MySQL 6.0 :( Я читал, что было перенесено множество чар с mysql 6.0 до mysql 5.5. В данный момент я пытаюсь подтвердить, что это конкретное исправление было включено в версию 5.5.

1 Ответ

0 голосов
/ 04 апреля 2011

Если ваш подзапрос возвращает только одну строку, вы можете использовать обычное объединение.Запрос будет переведен из other_table в parted_table.

select *
  from other_table
  join parted_table on(parted_table.id = other_table.col_fk);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...