存储引擎的选择
InnoDB和BDB 提供事务安全表,其他存储引擎都是非事务安全表,如MyISAM
MySQL5.5之后默认为InnoDB
MyISAM
MyISAM不支持事务,也不支持外键,其优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本上都可以使用这个引擎来创建表。
InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM,InnoDB写的效率要差一些,并且会占用更多的磁盘空间以保留数据和索引。
1.具有自动增长列。对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM,自动增长的列可以是组合索引的其他列。
2.外键约束。
MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。
MEMORY
MEMORY存储引擎使用存在于内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问速度非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。
MERGE:
MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,MERGE表本身没有数据。
索引的设计与使用
1、MyISAM和InnoDB存储引擎的表默认创建的都是BTREE索引。
2、创建索引的语法为:
create unique|fulltest|spatlal index index_name on table_name(index_col_name)
设计索引的原则
1、最适合索引列是出现在where 字句中的列,或链接字句中指定的列,而不是出现在SELECT关键字后的选择列表中的列。
2、使用唯一索引。索引的列的基数越大,索引的效果越好。
3、使用短索引。如果对字符串列进行索引,应该指定一个前缀长度,只要有可能就应该这样做。
4、利用最左前缀。
5、不要过度索引。