gpt4 book ai didi

MySQL:为什么索引列标记为 "BTREE?"

转载 作者:行者123 更新时间:2023-11-29 06:51:57 25 4
gpt4 key购买 nike

让我们看两个表:

    CREATE TABLE  `orders_products` (
`ORDER_ID` int(10) unsigned NOT NULL,
`PRODUCT_ID` int(10) unsigned NOT NULL,
`QUANTITY` tinyint(3) unsigned NOT NULL,
`USER_ID` int(10) unsigned NOT NULL,
PRIMARY KEY (`ORDER_ID`,`PRODUCT_ID`,`USER_ID`) USING BTREE,
KEY `FK_orders_products_3` (`USER_ID`),
KEY `FK_orders_products_2` (`PRODUCT_ID`) **USING BTREE**,
CONSTRAINT `FK_orders_products_1` FOREIGN KEY (`ORDER_ID`) REFERENCES `orders` (`ID`) ON DELETE CASCADE,
CONSTRAINT `FK_orders_products_2` FOREIGN KEY (`PRODUCT_ID`) REFERENCES `products` (`ID`) ON DELETE CASCADE,
CONSTRAINT `FK_orders_products_3` FOREIGN KEY (`USER_ID`) REFERENCES `users` (`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

另一个:

CREATE TABLE  `products_pictures_comments` (
`PICTURE_ID` int(10) unsigned NOT NULL,
`USER_ID` int(10) unsigned NOT NULL,
`COMMENT` text NOT NULL,
`DATEAT` datetime NOT NULL,
PRIMARY KEY (`PICTURE_ID`,`USER_ID`,`DATEAT`),
KEY `FK_products_pictures_comments_2` (`USER_ID`),
CONSTRAINT `FK_products_pictures_comments_1` FOREIGN KEY (`PICTURE_ID`) REFERENCES `products_pictures` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_products_pictures_comments_2` FOREIGN KEY (`USER_ID`) REFERENCES `users` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

如您所见,出于未知原因出现了 USING BTREE。我用 show index from 命令检查了表格,所有表格都说 BTREE 代表 Index_type。但它只出现在 FK_orders_products_2 外键中。为什么?

编辑:这些表定义是由 SHOW CREATE TABLE 生成的!

最佳答案

首先,我想提一下 BTREE 是 MYSQL 中大多数存储引擎的默认索引类型。我可以看到您正在将 InnoDB 存储引擎与这两个语句一起使用,并且 BTREE 是 innodb 存储引擎中索引的默认类型,尽管您没有指定关键字。

我很确定您在创建表 orders_products 表时可能保留了“USING BTREE”关键字,结果“USING BTREE”包含在由 SHOW CREATE TABLE 生成的 DDL 脚本中。

------------实验----------------

删除表 zzz_test1;

删除表 zzz_test2;

CREATE TABLE zzz_test1(id INT, NAME VARCHAR(50), PRIMARY KEY(id) USING BTREE);

创建表 zzz_test2(id INT, NAME VARCHAR(50), PRIMARY KEY(id));

显示创建表 zzz_test1;


------------输出----------------

创建表 zzz_test1 ( id INT(11) NOT NULL DEFAULT '0', 名称 VARCHAR(50) 默认 NULL, 主键 (id) 使用 BTREE) ENGINE=INNODB 默认字符集=latin1


显示创建表 zzz_test2;

------------输出----------------

创建表 zzz_test2 ( id INT(11) NOT NULL DEFAULT '0', NAME VARCHAR(50) 默认 NULL, 主键(id)) ENGINE=INNODB 默认字符集=latin1

关于MySQL:为什么索引列标记为 "BTREE?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14814650/

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