Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 18840

Using innodb_sys_tables and innodb_sys_indexes

$
0
0

I was playing with Percona Server today and found fast_index_creation does not work quite exactly like described in the manual. The point I’m looking to make though it would be very hard to catch this problem without additional
information_schema tables we added in Percona Server.

I was doing simple ALTER TABLE such as: “alter table sbtest add z int not null;” which I expected would create table with primary key only copy the data to it and when create secondary key by sort. Looking at innodb_sys_tables and innodb_sys_indexes I discovered it is not the case:

mysql> select * from innodb_sys_tables;
+----------+--------+------------------+------+--------+-------+
| TABLE_ID | SCHEMA | NAME             | FLAG | N_COLS | SPACE |
+----------+--------+------------------+------+--------+-------+
|       11 |        | SYS_FOREIGN      |    0 |      7 |     0 |
|       12 |        | SYS_FOREIGN_COLS |    0 |      7 |     0 |
|       14 | sbtest | #sql-430c_2a     |    1 |      7 |    11 |
|       13 | sbtest | sbtest           |    1 |      7 |    10 |
+----------+--------+------------------+------+--------+-------+
4 rows in set (0.00 sec)

mysql> select * from innodb_sys_indexes where table_id=13;
+----------+---------+----------+------+----------+---------+-------+
| INDEX_ID | NAME    | TABLE_ID | TYPE | N_FIELDS | PAGE_NO | SPACE |
+----------+---------+----------+------+----------+---------+-------+
|       15 | PRIMARY |       14 |    3 |        1 |       3 |    11 |
|       16 | k       |       14 |    0 |        1 |       4 |    11 |
+----------+---------+----------+------+----------+---------+-------+
2 rows in set (0.00 sec)

As you can see both primary key and secondary key exist in the table.

Looking around I found post by Alexey Kopytov which states you also need to set expand_fast_index_creation=1 if you want this feature to work… and indeed it does.

mysql> select * from innodb_sys_tables where table_id=18;
+----------+--------+--------------+------+--------+-------+
| TABLE_ID | SCHEMA | NAME         | FLAG | N_COLS | SPACE |
+----------+--------+--------------+------+--------+-------+
|       18 | sbtest | #sql-430c_2e |    1 |      8 |    15 |
+----------+--------+--------------+------+--------+-------+
1 row in set (0.00 sec)

mysql> select * from innodb_sys_indexes where table_id=18;
+----------+---------+----------+------+----------+---------+-------+
| INDEX_ID | NAME    | TABLE_ID | TYPE | N_FIELDS | PAGE_NO | SPACE |
+----------+---------+----------+------+----------+---------+-------+
|       24 | PRIMARY |       18 |    3 |        1 |       3 |    15 |
+----------+---------+----------+------+----------+---------+-------+
1 row in set (0.00 sec)

This table same ALTER TABLE works taking advantage of this feature.


PlanetMySQL Voting: Vote UP / Vote DOWN

Viewing all articles
Browse latest Browse all 18840

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>