目录
2.3 MySQL中的常用的存储引擎 MyISAM与InnoDB的区别?
2.5 MyISAM与InnoDB实现BTree索引的方式不同在哪?
2.8 既然索引这么多好处,为什么不给表中的每一列都创建索引?(索引的缺点?)
2.9 使用索引有哪些注意事项?(使用索引时,SQL语句怎么优化?)
一、索引介绍以及使用
1.1 什么是索引?
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。
从官方定义中,我们可以知道索引本质是一种数据结构。
详细一点的解释就是:
数据库除了数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构通过某种方式指向数据。如此一来,就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是 索引。
简单一点的解释就是:
索引是排好序的可快速查找的数据结构。
形象一点的解释就是:
索引就好像是新华字典的查找目录,可以帮助你快速查找到字典中的指定内容。
索引也像是图书馆的书籍查找目录,可以帮你快速查询到你要的书在哪。
1.2 索引的分类?
- 单值索引:一个索引只包含一个列,一个表可以有多个单列索引。
- 复合索引:一个索引包含多个列。
- 唯一索引:索引列的值必须是唯一的,但允许有多个空值。
1.3 索引的创建、查询、删除 的方式?
索引的创建有两种方法:CREATE 和 ALTER 。
/*ALTER*/
ALTER TABLE tableName ADD [UNIQUE] INDEX idx_name1 (column_name1);
/*CREATE*/
CREATE [UNIQUE] INDEX idx_name1 on tableName(colum_name1);
查询索引:
/*查询索引*/
SHOW INDEX FROM tableNmae
删除索引:
/*删除索引*/
DROP INDEX [indexName] ON tableName;
下面示范一下:
用create创建索引:
用alter创建单值索引:
创建多值索引:
用alter创建多值索引也类似,这里不演示了。
这里顺便说一下命名规范:
非唯一索引的命名(单值或多值):idx_字段名 (多值:idx_字段名1_字段名2_字段名3.....)
唯一索引命名:uni_字段名
二、高频面试题(通过面试题更能了解索引)
2.1 什么是索引?
索引(Index)是帮助MySQL高效获取数据的数据结构。
(具体的可看上面的索引介绍。)<