在 MySQL 'CREATE TABLE' 语句中使用和不使用 BTREE 有什么区别?
What's the difference between using and not using BTREE in MySQL 'CREATE TABLE' statement?
我是 SQL 的新手,我想创建一个 table,我看到一个例子:
DROP TABLE IF EXISTS `aaa`;
CREATE TABLE `aaa` (
`date` datetime DEFAULT NULL,
`id` varchar(200) DEFAULT NULL,
...
`source` varchar(200) DEFAULT NULL,
KEY `idx1` (`source`),
KEY `idx2` (`id`,`date`) USING BTREE,
KEY `idx3` (`date`) USING BTREE
) ENGINE=MyISAM
我一直在网上阅读有关 USING BTREE
的信息,但仍然有点困惑,为什么 idx1
没有而 idx2
、idx3
有 USING BTREE
?有什么区别和目的?使用它有什么好处?谢谢。
除语法外没有区别。
- 默认为
BTree
。
- 如果你什么都不说,或者即使你说
HASH
,它也会被默默地转换成BTree
。
本质上,BTree 是一种良好的通用索引机制。
- 查找特定行(“点查询”)非常快。例如:
WHERE x = 123
- 扫描“范围”或行非常有效。例如:
WHERE x BETWEEN 333 AND 444
(对比:HASH 非常慢。)
FULLTEXT 和 SPATIAL(如果需要)需要明确说明。
你真的应该从 MyISAM 转移到 InnoDB。
参见维基百科:MyISAM 使用 B-Tree; InnoDB 使用 B+树。
我是 SQL 的新手,我想创建一个 table,我看到一个例子:
DROP TABLE IF EXISTS `aaa`;
CREATE TABLE `aaa` (
`date` datetime DEFAULT NULL,
`id` varchar(200) DEFAULT NULL,
...
`source` varchar(200) DEFAULT NULL,
KEY `idx1` (`source`),
KEY `idx2` (`id`,`date`) USING BTREE,
KEY `idx3` (`date`) USING BTREE
) ENGINE=MyISAM
我一直在网上阅读有关 USING BTREE
的信息,但仍然有点困惑,为什么 idx1
没有而 idx2
、idx3
有 USING BTREE
?有什么区别和目的?使用它有什么好处?谢谢。
除语法外没有区别。
- 默认为
BTree
。 - 如果你什么都不说,或者即使你说
HASH
,它也会被默默地转换成BTree
。
本质上,BTree 是一种良好的通用索引机制。
- 查找特定行(“点查询”)非常快。例如:
WHERE x = 123
- 扫描“范围”或行非常有效。例如:
WHERE x BETWEEN 333 AND 444
(对比:HASH 非常慢。)
FULLTEXT 和 SPATIAL(如果需要)需要明确说明。
你真的应该从 MyISAM 转移到 InnoDB。
参见维基百科:MyISAM 使用 B-Tree; InnoDB 使用 B+树。