gpt4 book ai didi

mysql - 改变表增加索引长度

转载 作者:行者123 更新时间:2023-11-29 03:34:28 25 4
gpt4 key购买 nike

我有一个名为 t_media_items 的 mysql 表。我有 3 列(parent_id、类型、重量)的索引。索引大小为 2.52MB。

mysql> show indexes from t_media_items;

+---------------+------------+--------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------------+------------+--------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| t_media_items | 0 | PRIMARY | 1 | id | A | 113779 | NULL | NULL | | BTREE | | |
| t_media_items | 1 | idx_ptw | 1 | parent_id | A | 16254 | NULL | NULL | | BTREE | | |
| t_media_items | 1 | idx_ptw | 2 | type | A | 16254 | NULL | NULL | | BTREE | | |
| t_media_items | 1 | idx_ptw | 3 | weight | A | 113779 | NULL | NULL | | BTREE | | |
+---------------+------------+--------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
4 rows in set (0.01 sec)


mysql> SELECT table_name AS "Tables", round(((index_length) / 1024 / 1024), 2) SIB
FROM information_schema.TABLES
WHERE table_schema = "XXXX" and table_name='t_media_items'
ORDER BY (index_length ) DESC;

+---------------+------+
| Tables | SIB |
+---------------+------+
| t_media_items | 2.52 |
+---------------+------+
1 row in set (0.00 sec)

我试图改变另一列的长度,命名为“rand_key”。奇怪的是在columned alter之后,INDEX的大小突然增加到5.52MB,连“rand_key”都不是索引的一部分。

mysql> ALTER TABLE `t_media_items` CHANGE `rand_key` `rand_key` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
Query OK, 108503 rows affected (7.24 sec)
Records: 108503 Duplicates: 0 Warnings: 0

这里是 ALTER 之后的 INDEX_LENGTH

mysql> SELECT table_name AS "Tables",  round(((index_length) / 1024 / 1024), 2) SIB  
FROM information_schema.TABLES
WHERE table_schema = "tallcat" and table_name='t_media_items'
ORDER BY (index_length ) DESC;
+---------------+------+
| Tables | SIB |
+---------------+------+
| t_media_items | 5.52 |
+---------------+------+
1 row in set (0.00 sec)

谁能帮我解释一下这个问题?谢谢

最佳答案

ALTER TABLE 执行表重组,即创建表的空克隆,应用更改,并将数据复制到其中。作为此过程的副产品重建索引。

但是当它在用数据填充表的同时逐步构建索引时,它没有利用 fast index creation .索引的存储不太紧凑。

我不知道这是否可以解释大小增加超过 2 倍,但这是可能的。

我假设您使用的是 MySQL 5.5 或更高版本,或者 5.1 和 InnoDB 插件。无论如何,早期版本不支持快速创建索引。

关于mysql - 改变表增加索引长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24821188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com