为了降低基于主键查询的io,InnoDB采用聚簇索引的方式存储数据。
1.如果你的数据库服务器出了软硬件的问题导致server崩溃,不管此时数据库正在处理什么,你只需重启数据库服务而不需要做任何处理,崩溃前已提交的事务不会有什么改变,未提交的事务就回滚他,重启服务后,将会从结束的地方从新开始未提交的事务;
2.被访问的表的数据和索引都会被cache到buffer pool中,频繁访问的数据直接在内存中处理;
3.数据分割,使用外键级联处理数据保证数据一致性;
4.磁盘或内存中数据损坏,InnoDB的chechksum机制会校验并恢复数据;
5.为表设计恰当的主键,对这些列的操作会被自动的优化,在where,order by,group by,join中引用主键列是非常快的;
6.InnoDB通过change buffering优化了DML操作,不但实现了数据的并发读写,change buffering还精简了磁盘io的调度;
7.InnoDB对大表的查询也进行了优化,当多次访问同一张表的相同记录的时候,一种叫自哈希索引的机制能加速查询;
8.压缩表和索引;
9.创建和删除索引对性能的影响更小;
10.truncate一个独立表空间的表很快,并且能释放磁盘空间为系统重用;
11.动态表中存储blob和long text类型数据更有效;
12.通过information_schema表监控存储引擎的运行情况;
13.通过performance_schema监控存储引擎的性能;
InnoDB最新变化
mysql目前还在努力解决以前使用myisam的案例(情况)
1.支持全文索引;
2.对只读和近乎只读进行了优化。使用自动提交模式自优化innodb查询,并且可以通过start transaction read only显式声明事务只读;
3.现在分布在只读介质上的应用可以用innodb表;
针对innodb表的sql优化
1.为频繁查询的表列创建主键,或者自增id主键;
2.多表查询增减外键,键值列数据类型一致;
3.关闭自动提交,设置一个提交的上线值;
4.分组合并提交,减少提交次数;
5.不用lock tables语句,mvcc已经提供了很好的并发控制,for update 加where条件提高并发(当然在索引设计要合理的基础上);
6.启用innodb_file_per_table;
7.评估压缩表的功能-- create table row_format=compression;
8.启动server时带--sql_mode=NO_ENGINE_SUBSTITUTION以防创建表是有不同的存储引擎;
Testing and Benchmarking with InnoDB as Default Storage Engine
1.my.cnf文件中mysqld组添加default-storage-engine=innodb来设置默认存储引擎;
选项来开启
阅读(802) | 评论(0) | 转发(0) |