InnoDB表的限制

MySQL 5.7 InnoDB-restrictions

MyISAM 表的限制

MySQL 5.7 MyISAM-Storage-Engine

索引注意

  • 索引的限制是以字节为单位的, 而表中的varchar等这些是以符为单位的.

索引原则

  • 搜索的索引列,不一定是所要选择的列.最适合索引的列是出现在WHERE子句中的列,或连接子句中指定的列,而不是出现在SELECT关键字后的选择列表中的列

  • 使用唯一索引。考虑某列中值的分布。索引的列的基数越大,索引的效果越好

  • 使用短索引。如果对字符串列进行索引,应该指定一个前缀长度,只要有可能就应该这样做。

  • 利用最左前缀

  • 不要过度索引

  • 对于InnoDB存储引擎的表,记录默认会按照一定的顺序保存,如果有明确定义的主键,则按照主键顺序保存。如果没有主键,但是有唯一索引,那么就是按照唯一索引的顺序保存。如果既没有主键又没有唯一索引,那么表中会自动生成一个内部列,按照这个列的顺序保存。

  • 另外,还需要注意,InnoDB 表的普通索引都会保存主键的键值,所以主键要尽可能选择较短的数据类型,可以有效地减少索引的磁盘占用,提高索引的缓存效果.

  • 当对索引字段进行范围查询的时候,只有BTREE索引可以通过索引访问

  • 注意如果需要访问大部分行,顺序读取要快得多,因为此时应避免磁盘搜索