Как выбрать строки из раздела в MySQL


Я сделал секцию моей таблицы 300MB и пытаюсь сделать select query from p0 partition с помощью этой команды

SELECT * FROM employees PARTITION (p0);

Но я получаю следующую ошибку

ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near '(p0)' at line 1

Как написать запрос select для получения данных из конкретного раздела?

6 9

6 ответов:

В зависимости от вашей версии MySql, ключевое слово PARTITION не существует доMySQL 5.6.2 . Вы бы использовали MySQL 5.5 или даже 5.1, но не 5.6. В случае, если вы используете MySQL 5.1, то вы можете сделать некоторые обходные пути, как показано ниже

SELECT partition, count(ID)
FROM
(
    SELECT ID,
      case when condition then p1
           when condition then p2
      .....
      end as partition

    FROM
      table
) s1
GROUP BY partition

Примечание: вышеуказанное решение - это просто обходной путь, чтобы получить желаемый результат.

Вы также можете попробовать этот запрос, чтобы подсчитать общее количество строк для вашего раздела.

SELECT table_rows as 'count(*)' FROM information_schema.partitions WHERE table_schema = schema() and table_name ='employees' and partition_name = 'p0';

Примечание: вы можете изменить table_schema = schema() на table_schema = 'yourschema'

На самом деле, начиная с MySQL 5.6, поддерживаемый синтаксис:

SELECT * FROM table PARTITION (partitionName);

Вы правы, явный выбор раздела не поддерживается в версии 5.1.54. Смотрите Этот пост

Не знаю, почему мой ответ был преобразован в комментарий ;)

Кладу его обратно. Проверьте этот вопрос на DBA . Он не поддерживается в текущей версии MYSQL.

Вы также можете проверить MYSQL dev article

  1. создать таблицу trb3(id INT, имя VARCHAR (50), дата покупки) разбиение по столбцам списка (имя) (значения раздела p0 в ('ETH / USD'), значения раздела p1 в ('BTC / USD'), значения раздела p2 в ('BTC/KES'), значения раздела p3 в ('ETH/KES'));

2.выберите PARTITION_NAME из information_schema.разделы;

Вставить в trb3 значения ('1', 'ETH / USD', NULL), ('2', 'BTC / USD', NULL), ('3', 'BTC/KES', NULL), ('4', 'BTC/KES', NULL), ('5', 'ETH/KES', NULL),
('6', 'ETH/KES', NULL), ('7', 'BTC / USD', NULL), ('8', 'BTC / USD', NULL), ('9', 'ETH / USD', NULL), ('10', 'ETH/USD', NULL);

  1. Выберите * из раздела trb3 (p0);
  2. Выберите * из раздела trb3 (p3);
  3. вставить в раздел trb3(p3) значения ('11', 'ETH/KES', NULL);

Правильная форма query, как показано ниже, работает для меня отлично.

select * from employees partition (`p0`);