Подтвердить что ты не робот

Как увидеть размер раздела таблицы в MySQL (возможно ли это?)

Я разбил таблицу по горизонтали, и мне хотелось бы посмотреть, как распределяются строки в настоящее время. Поиск в Интернете не принес каких-либо релевантных результатов.

Может ли кто-нибудь сказать мне, возможно ли это?

4b9b3361

Ответ 1

Вы можете получить строки каждого раздела с помощью information_schema.

Вот мои тестовые тесты.

mysql> SELECT PARTITION_ORDINAL_POSITION, TABLE_ROWS, PARTITION_METHOD
       FROM information_schema.PARTITIONS 
       WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'tbl_name';
+----------------------------+------------+------------------+
| PARTITION_ORDINAL_POSITION | TABLE_ROWS | PARTITION_METHOD |
+----------------------------+------------+------------------+
|                          1 |          2 | HASH             |
|                          2 |          3 | HASH             |
+----------------------------+------------+------------------+

mysql> SHOW CREATE TABLE tbl_name\G
*************************** 1. row ***************************
       Table: p
Create Table: CREATE TABLE `tbl_name` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY HASH (a)
PARTITIONS 2 */
1 row in set (0.00 sec)


mysql> SELECT * FROM tbl_name;
+------+
| a    |
+------+
|    2 |
|    4 |
|    1 |
|    3 |
|    5 |
+------+
5 rows in set (0.00 sec)

ОБНОВЛЕНО

Из Руководство по MySQL:

Для секционированных таблиц InnoDB количество строк, указанное в столбце TABLE_ROWS, является оценочным значением, используемым при оптимизации SQL, и может не всегда быть точным.

Благодаря @Constantine.

Ответ 2

Просто чтобы добавить ответы Джейсона, в соответствии с справочным руководством вы можете найти способы получения информации о существующих разделах в таблице -

  • Использование Show Create Table - просмотр предложений о разделении, используемых при создании разделенной таблицы; Синтаксис:
    show create table table_name;
    Результат выборки:
    CREATE TABLE 'trb3' ( 'id' int(11) default NULL, 'name' varchar(50) default NULL, 'purchased' date default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY RANGE (YEAR(purchased)) ( PARTITION p0 VALUES LESS THAN (1990) ENGINE = MyISAM, PARTITION p1 VALUES LESS THAN (1995) ENGINE = MyISAM, PARTITION p2 VALUES LESS THAN (2000) ENGINE = MyISAM, PARTITION p3 VALUES LESS THAN (2005) ENGINE = MyISAM )

  • Использование Show Table Status - определение того, разделена ли таблица,

    Синтаксис:
    show table status in db_name like table_name;
    Результат выборки: Показывает много информации о таблицах, таких как "Имя", "Двигатель", "Версия", "Длина данных" и т.д. Вы получаете значение "секционированное" для параметра "Create_options" на выходе.

  • Запрос таблицы INFORMATION_SCHEMA.PARTITIONS.
    (Обратитесь к ответам Джейсона, вы можете дополнительно добавить SUBPARTITION_NAME, SUBPARTITION_ORDINAL_POSITION, SUBPARTITION_METHOD, PARTITION_EXPRESSION и т.д. Выберите параметры, чтобы получить дополнительную информацию. Обратитесь Справочник по MySQL Ref.)

  • Использование оператора EXPLAIN PARTITIONS SELECT - см., какие разделы используются данным SELECT Синтаксис:
    EXPLAIN PARTITIONS SELECT * FROM trb1
    Результат выборки:
    id: 1 select_type: SIMPLE table: trb1 partitions: p0,p1,p2,p3 type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 10 Extra: Using filesort

Подробнее В Справочник по MySQL Ref