性能优化Mysql数据库优化

配置优化

query_cache_size:查询缓存大小配置

query_cache_limit:指定单个查询能够使用的缓冲区大小,缺省为1M

query_cache_min_res_unit:默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费

innodb_buffer_pool_size=M:innodb的缓存的大小配置

innodb_additional_mem_pool_size=16M:网络传输中一次消息传输量的最大值。系统默认值为1MB,最大值是1GB,必须设置的倍数

innodb_log_files_in_group=3:循环方式将日志文件写到多个文件推荐设置为3

innodb_lock_wait_timeout=:死锁检测机制,能导致未完成的事务回滚

innodb_file_per_table=0:独立表空间,设置0为关闭独立的表空间

sort_buffer_size=2M:connection级参数,太大将导致在连接数增高时,内存不足

max_allowed_packet=32M:网络传输中一次消息传输量的最大值。系统默认值为1MB,最大值是1GB,必须设置的倍数

join_buffer_size=2M:和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享

tmp_table_size=M:默认大小是32M,GROUPBY多不多的问题

max_heap_table_size=M,key_buffer_size=M:索引的缓冲区大小,对于内存在4GB左右的服务器来说,该参数可设置为MB或MB

read_buffer_size=1M,read_rnd_buffer_size=16M:进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索

bulk_insert_buffer_size=64M:批量插入数据缓存大小,可以有效提高插入效率,默认为8M

设计优化

数据库的设计肯定很重要,结构良好的关系表非常易于扩展,变动,有以下经验

主键是业务无关的(最重要),主键是bigint型最快,uuid我个人不常用功能表与业务区分开,附件、字典等层级关系建立冗余,parent_ids字段很重要:0,,,,,记得以逗号结尾,在查询中直接追溯所有父节点(补0用in),所有子集的查询也仅需要like,这时有个逗号可以避免编号中继缺陷先保持到第3范式,冗余在此基础上进行,否则就是乱来文件存储在磁盘上,而不是数据库里命名全小写,下划线隔开单词,不要加通用前缀,但要加模块前缀SQL优化

子查询在查询列不要用,一律改为join,哪怕是leftjoin也比它快多使用explain查看执行计划,参数解释如下,索引更重要覆盖索引:是指查询结果集从索引中就能取到,不必走二次磁盘扫描三星索引:是指查询列,where条件,orderby条件,groupby全在索引中可找到结果组合索引:强力工具,当经常用的条件,按区分度排列形成组合索引,查询性能大大提高不宜建索引的情况参与计算列,小表,频繁更新的表,字段集中度高。区分度的确定SELECTCOUNT(DISTINCT列_xx)/COUNT(*)FROM表




转载请注明:http://www.aierlanlan.com/rzfs/1996.html