我是SQL新手,我想创建一个表,我看到一个例子:
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
(对比:Very slow for HASH)
FULLTEXT和SPATIAL,如果需要,需要明确的规范。
你真的应该从MyISAM转向InnoDB。
参见Wikipedia: MyISAM使用B-Tree;InnoDB使用B+Tree