Vraag Hoe de grootte van de tabelpartitie in MySQL te bekijken (is het zelfs mogelijk?)


Ik heb mijn tabel horizontaal gepartitioneerd en ik wil graag zien hoe de rijen momenteel worden verdeeld. Zoeken op het web leverde geen relevante resultaten op.

Kan iemand me vertellen of dit mogelijk is?


13
2017-12-31 00:18


oorsprong


antwoorden:


Je zou rijen van elke partitie kunnen gebruiken information_schema.

Dit zijn mijn voorbeeldtests.

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)

UPDATE

Van MySQL Handleiding:

Voor gepartitioneerde InnoDB-tabellen is het rij-aantal gegeven in de kolom TABLE_ROWS slechts een geschatte waarde die wordt gebruikt in SQL-optimalisatie en is niet altijd exact.

Met dank aan @Constantine.


18
2017-12-31 00:48



Gewoon om toe te voegen aan Jason's antwoorden, zoals in de referentiehandleiding, je hebt de volgende manieren om informatie te krijgen over bestaande partities op je tafel -

  1. Show-tabel maken gebruiken - om de partitioneringclauses te bekijken die worden gebruikt bij het maken van een gepartitioneerde tabel; Syntaxis :
    show create table table_name;
    Voorbeelduitvoer :
    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 )

  2. Tabelstatus weergeven gebruiken - om te bepalen of een tabel is gepartitioneerd;
    Syntaxis:
    show table status in db_name like table_name;
    Voorbeelduitvoer: Toont veel informatie over de tabel, zoals Naam, Motor, Versie, Datalengte enz. U krijgt de waarde 'gepartitioneerd' voor de parameter 'Create_options' in de uitvoer.

  3. Zoeken in de tabel INFORMATION_SCHEMA.PARTITIONS.
     (Verwijs naar Jason's antwoorden, je kunt optioneel SUBPARTITION_NAME, SUBPARTITION_ORDINAL_POSITION, SUBPARTITION_METHOD, PARTITION_EXPRESSION enz. Toevoegen Selecteer parameters om meer informatie te krijgen. MySQL Ref Manual )

  4. Gebruik de instructie EXPLAIN PARTITIONS SELECT - zie welke partities door een bepaalde SELECT worden gebruikt
    Syntaxis: 
    EXPLAIN PARTITIONS SELECT * FROM trb1
    Voorbeelduitvoer:
    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

Lees meer bij MySQL Ref Manual


1
2018-04-18 12:31