发布时间:2023-07-06 19:30
说说你对 MySQL 索引的理解?
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
聚集索引与非聚集索引的区别?
InnoDB引擎中的索引策略,了解过吗?
创建索引的方式有哪些?
聚簇索引/非聚簇索引,mysql索引底层实现,为什么不用B-tree,为什么不用hash,叶子结点存放的是数据还是指向数据的内存地址,使用索引需要注意的几个地方?
mysql官方对索引的定义为:索引是帮助Mysql搞笑获取数据的数据结构,所以说索引的本质是:数据结构
索引的目的在于提高查询效率,可以类比字典的目录。
除了数据以外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查找算法。
索引本身也很大,不可能全部存储在内存中,一般以索引文件的形式存储在磁盘上。
索引没有特别指明的话,就是B+树,其中聚集索引,次要索引,覆盖索引,符合索引,前缀索引,唯一索引默认都是使用B+树索引,此外还有哈希索引。
基本语法
创建索引
create [unique] index indexName on mytable(username(length))
如果是char varchar类型 length可以小于字段实际长度,如果是BLOB和text类型,必须指定length。
修改表结构(添加索引)
alter table tableName ADD [UNIQUE] INDEX indexName(columnName)
删除
drop index [indexName] on mytable
查看
show index from table_name\G
使用ALERT命令
该语句添加一个主键,这意味着索引值必须是唯一的。
alter table tal_name add primary key
这条语句创建的值必须是唯一的 是唯一索引,但是Null可以出现多次
ALTER TABLE tbl_name ADD UNIQUE index_name
添加普通索引,索引值可出现多次
ALTER TABLE tbl_name ADD INDEX index_name
该语句指定了索引为fulltext, 用于全文索引。
ALTER TABLE tbl_name ADD FULLTEXT index_name
优势