【问题标题】:What's the difference between using and not using BTREE in MySQL 'CREATE TABLE' statement?在 MySQL 'CREATE TABLE' 语句中使用和不使用 BTREE 有什么区别?
【发布时间】:2021-04-18 15:15:59
【问题描述】:

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

【问题讨论】:

    标签: mysql indexing mysql-workbench create-table b-tree


    【解决方案1】:

    没有区别,除了语法。

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

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

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

    如果需要,FULLTEXT 和 SPATIAL 需要明确说明。

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-21
      • 2018-06-06
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2019-09-03
      相关资源
      最近更新 更多