7. 聚簇索引
每个InnoDB表都有一个特殊的索引,称为聚簇索引,其中存储着数据行。通常聚簇索引与主键是同义词
归属:聚簇索引是InnoDB存储引擎所特有的
说明:
◇ 当你为表定义主键时,InnoDB会将其作为表的聚簇索引。请为你创建的每个表都显式地定义主键。如果不存在逻辑上唯一且非空的列或列组合,请添加一个自增列,其值能够自动填充;
◇ 如果你没有为表定义主键,InnoDB将查找第一个全部列都是NOT NULL的唯一索引,将其用作聚簇索引;
◇ 如果表没有主键,也没有符合条件的唯一索引,InnoDB将在一个包含行ID的合成列上生成隐藏的聚簇索引。此时数据行将根据InnoDB分配给数据行的ID值进行排序。行ID是一个6字节的字段,随着新行插入到表中而单调递增。因此,根据行ID排序实际上就是根据行的插入顺序排序;
为了使查询、插入和其它数据库操作的性能最佳,你必须了解InnoDB如何使用聚簇索引来优化每个表中最常见的查询和DML操作
聚簇索引如何加速查询
通过聚簇索引访问数据行是很快的,因为索引搜索能够直接定位到包含该行全部数据所在的页面。如果表很大,与行数据和索引记录存储在不同页面的存储组织相比,聚簇索引结构通常能够节省一次磁盘I/O操作
辅助索引和聚簇索引的关系
除聚簇索引以外的所有索引都称为辅助索引。在InnoDB中,辅助索引中的每个记录既包含辅助索引列,也包含主键列。InnoDB使用主键值搜索聚簇索引中的数据行。如果主键很长,辅助索引使用的空间将会更多,因此一个短的主键是有利的
6. 索引
索引的类型:
◇ B-Tree索引
◇ 哈希索引
◇ 空间索引
◇ 全文索引
主键:InnoDB与MyISAM都拥有主键的概念,结构上都是一棵B-Tree,但区别如下:
InnoDB的主键即聚簇索引,聚簇索引即主键;
MyISAM的主键与辅助索引结构上没有差别,MyISAM的主键即普通的唯一非空索引
5. 存储引擎
存储引擎分类:
◇ InnoDB
◇ MyISAM
◇ 其它的MySQL内置存储引擎,如ARCHIVE, MEMORY
◇ 第三方存储引擎
4. 字符串字面值
△ 字符串是由单引号或双引号包裹的字节或字符序列,例如:
'a string'
"another string"
△ 彼此相邻的字符串,会被连接到一起,形成一个新的字符串,例如下面两行等价:
'hello world'
'hello' " " "world"
△ 字符串内的某些字符序列有特殊的含义,它们被称为转义序列,转义序列以转义字符「」开头,MySQL识别的转义序列如下图所示
对于其它的转义序列,反斜杠自动被忽略,也就是说被转义字符当作无转义字符对待,例如,x相当于x
转义序列,大小写敏感,例如,相当于退格符,而B相当于B
模式匹配上下文中,「%」和「_」作为通配符存在,所以在模式匹配上下文中,如需引用「%」和「_」,需要对其转义,例如「%」「\_」。而在模式匹配上下文之外,「%」「\_」代表的就是「%」「\_」,而非「%」和「_」
△ 在字符串中包含引号字符的方式如下:
① '里面包含'时,字符串里的单引号需写两次''
② "里面包含"时,字符串里的双引号需写两次""
③ 对引号字符进行转义,字符前加反斜杠
④ "里面包含',或'里面包含"时,无需特别对待
示例:
3. 文件结构
MySQL中,每个数据库,对应数据目录中的一个单独的目录;数据库中的表,对应数据库目录中一个或多个文件
2. 关键字和保留字
「interval」「write」
完整保留字列表
https://dev.mysql.com/doc/refman/5.5/en/keywords.html
1. 标识符
MySQL内的某些对象,如数据库、表、索引、列、别名、视图、存储过程、分区、表空间和其它一些对象,它们的名字被称作标识符
△ 引用标识符时,可以加,也可以不加引号,但是当标识符为下列情况之一时,引用时必须加引号:
① 包含特殊字符,比如「减号-」
② 本身是保留字
☆ 标识符引号字符是反引号
△ 标识符中可以包含引号字符,提前是标识符已被引号字符引用。当标识符内含的引号与引用标识符的引号相同时,你需要将标识符内含的引号写两次
示例:创建一个名为a`b的表,表中包含一个名为c"d的整数列
△ Unix MySQL下,数据库名,表名,大小写敏感;列名,索引名,大小写不敏感