myisam 默认的存储格式是静态表,如果需要保存的内容后面本来就带有空格,那么在返回结果的时候也会被去掉.

myisam的动态表频繁dml会产生碎片,需要定期执行optimize table语句或myisamchk -r命令.

innodb表,自动增长列必须是索引.如果是组合索引,必须是组合索引的第一列.

innodb表,可以通过暂时关闭外键约束来加快处理的速度,关闭的命令是set foreign_key_checks=0;

innodb,存储表和索引存储分为:共享表空间存储和多表空间存储.由参数innodb_file_per_table决定.

status中handler_read_key的值很高,代表了一个行被索引读的次数高,说明索引正在工作.

status中handler_read_rnd_next的值高则意味着查询运行低效,并且应该建立索引补救.

analyze table将可以使得系统得到准确的统计信息,使得sql能够生成正确的执行计划.

check table的作用是检查表或视图是否有错误.

optimize table可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费,for myisam,bdb,innodb.

从不同客户插入很多行,能通过使用insert delayed语句得到更高的速度.

如果查询包括group by 但用户想要避免排序结果的消耗,则可以指定order by null 禁止排序.

可以使用use index,ignore index,force index这些sql hint选择索引

procedure analyze()函数可以对数据表中列的数据类型提出优化建议.

myisam可通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争用.

myisam系统变量concurrent_insert用以控制其并发插入的行为,值为2时总是允许并发插入.

innodb可通过检查innodb_row_lock状态变量来分析系统上的行锁的争用.

innodb在不通过索引条件查询的时候,innodb使用的是表锁,而不是行锁.

myisam的参数key_buffer_size用来设置索引块缓存的大小,它所有线程共享.

table_cache参数表示数据库用户打开表的缓存数量,每个连接进来,都会至少打开一个表缓存 ,它与max_connections有关.可以通过检查open_tables和opened_tables确定这个参数的大小.

innodb_buffer_pool_size参数定义innodb存储引擎的表数据和索引数据的最大内存缓冲区大小.

innodb_flush_log_at_trx_commit参数用来控制缓冲区中的数据写入到日志文件以级日志文件数据刷新到磁盘的操作机制.0表示每秒写日志文件,并刷硬盘;1表示每事务写日志文件,并刷硬盘;2表示每事务写日志,但不刷硬盘.

sync_binlog=1是最安全但是性能损耗最大的设置,是差不多比sync_binlog=0时的写入性能差5倍左右.

innodb_additional_mem_pool_size参数用来存储数据库结构和其他内部数据结构的内存池的大小.

innodb_lock_wait_timeout参数主要被用于在出现死锁情况的时候等待指定的时间后回滚.

innodb_support_xa参数设置是否支持分布式事务,默认值是on,关闭这个参数,可减少磁盘刷新次数提高性能.

innodb_log_buffer_size参数是日志缓存的大小,一般8~16M就够了.

innodb_log_file_size参数是一个日志组中每个日志文件的大小,这个值越大性能相对越高,但恢复时间会加大.

mysqldump备份时,为了保证数据备份的一致性,myisam存储引擎在备份的时候需要加上-l参数,innodb和bdb存储引擎要加上--single-transaction参数.

log-slave-updates这个参数用来配置从服务器上的更新操作是否写二进制日志,默认是不打开的.

忘记mysql的root密码,通过--skip-grant-tables参数解决.

max_connections:整个mysql允许的最大连接数.

max_user_connections:每个用户允许的最大连接数.