Как выбрать строки из раздела в 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 ответов:
В зависимости от вашей версии 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. Смотрите Этот пост
- создать таблицу 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);
- Выберите * из раздела trb3 (p0);
- Выберите * из раздела trb3 (p3);
- вставить в раздел trb3(p3) значения ('11', 'ETH/KES', NULL);