linux mysql数据库总结:
mysql 的两大存储引擎,MyISAM 和innDB
MyISAM: 适合大量查询的操作,表锁
innBDB: 适合插入和更新操作多用,行锁
数据库的优化:引用索引,加快检索数据的操作,但是修改数据操作会很麻烦。每修改一行数据,就会刷新一次索引。
- 表字段字符类型尽量使用varchar
- 单表字段不要太多,建议20以下
- 尽量不要使用NULL字段
- 尽量不要在where子句后判断NULL值
- 通过慢查询找出较慢的sql
- 不做列运算 select id from a where age+1=10,这样会全表扫描,表达式都放到等号右边
- 不用 select * 来查询
- 能用in就不用or
- 少用join查询
- 字符串比较尽量是相同类型比较
- where 子句后面不要使用!=或者<>,这样会全表扫描
- 如果条件是连续的数值用between and,不用in
back_log:堆栈存放数量超过back_log后将不被赋予连接资源,可以从默认50升到500
wait_timeout:数据库连接闲置时间,闲置连接会占用内存资源,默认是8小时,可以调整到半小时。
max_user_connection:最大连接数,默认是0,无上限,最好设置合理上限。
thread_concurrecy:并发线程数,设置为cpu核数的两倍。
skip_name_resolve:禁止对外部连接进行dns解析,消除dns解析的时间,需要所有的远程机器用ip访问。
key_buffer_size:索引块缓存大小,增加会提升索引处理速度,对MyISAM表影响最大,
对于内存4G左右,可设为256M或384M,通过查询show status like ‘key_read%’,保证key_reads / key_read_requests在0.1%以下最好
innodb_buffer_pool_size:缓存数据块和索引块,对innodb影响最大。保证 (Innodb_buffer_pool_read_requests – Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests越高越好
innodb_additional_mem_pool_size:InnoDB存储引擎用来存放数据字典信息以及一些内部数据结构的内存空间大小,当数据库对象非常多的时候,适当调整该参数的大小以确保所有数据都能存放在内存中提高访问效率,当过小的时候,MySQL会记录Warning信息到数据库的错误日志中,这时就需要该调整这个参数大小
read_buffer_size:MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。如果对表的顺序扫描请求非常频繁,可以通过增加该变量值以及内存缓冲区大小提高其性能
sort_buffer_size:MySql执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。如果不能,可以尝试增加sort_buffer_size变量的大小
read_rnd_buffer_size:MySql的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。