配置优化
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表