在 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 没有而 idx2idx3USING BTREE?有什么区别和目的?使用它有什么好处?谢谢。

除语法外没有区别。

  • 默认为BTree
  • 如果你什么都不说,或者即使你说HASH,它也会被默默地转换成BTree

本质上,BTree 是一种良好的通用索引机制。

  • 查找特定行(“点查询”)非常快。例如:WHERE x = 123
  • 扫描“范围”或行非常有效。例如:WHERE x BETWEEN 333 AND 444(对比:HASH 非常慢。)

FULLTEXT 和 SPATIAL(如果需要)需要明确说明。

你真的应该从 MyISAM 转移到 InnoDB。

参见维基百科:MyISAM 使用 B-Tree; InnoDB 使用 B+树。