一: 主要可以通过5种方法 1:query_cache_size 2开启二进制日志 3 开启慢查询日志 4: table_cache 5: key_buffer_size
前面三种 我们已经讨论过了 ,现在看看后面的两种 :
table_cache 指定表的高速缓存的大小,当mysql访问一个表的时候,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。
open_tables 表示当前打开的表缓存数,如果执行flush tables操作,则此系统会关闭一些当前没有使用的表缓存而使得此状态值减小;
opend_tables 表示曾经打开的表缓存数,会一直进行累加,如果执行flush tables操作,值不会减小。
在mysql默认安装情况下,table_cache的值在2G内存以下的机器中的值默认时256到512,如果机器有4G内存,则默认这个值是2048,但这决意味着机器内存越大,这个值应该越大,因为table_cache加大后,使得mysql对SQL响应的速度更快了,不可避免的会产生更多的死锁(dead lock),这样反而使得数据库整个一套操作慢了下来,严重影响性能。所以平时维护中还是要根据库的实际情况去作出判断,找到最适合你维护的库的table_cache值。
在谈谈key_buffer_size
key_buffer_size 这个参数是用来设置索引块(index blocks)缓存的大小,它被所有线程共享,严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。那我们怎么才能知道key_buffer_size 的设置是否合理呢,一般可以检查状态值Key_read_requests和Key_reads,比例key_reads / key_read_requests应该尽可能的低,比如1:100,1:1000 ,1:10000。
Variable_name Value
Key_read_requests 20948
Key_reads 69
key_reads / key_read_requests=69: 20948≈1:300
所以比较大,性能状况欠佳
二 :尽量把 left join 转为join
三 :explain的使用
返回结果:
Id: SELECT识别符
select_type: SELECT类型
Table:输出的行所引用的表
Type:联接类型
possible_keys:指出MySQL能使用哪个索引在该表中找到行
Key:显示MySQL实际决定使用的键(索引)
key_len:显示MySQL决定使用的键长度
Ref:显示使用哪个列或常数与key一起从表中选择行
Rows:显示MySQL认为它执行查询时必须检查的行数
Extra:该列包含MySQL解决查询的详细信息
四 :添加索引:
添加索引的原则
1 较频繁的作为查询条件的字段应该添加索引
2 唯一性太差的字段不应该添加索引
3 更新太频繁的字段不适合创建索引
4 不会出现在where子句中的字段不应该创建索引
前面三种 我们已经讨论过了 ,现在看看后面的两种 :
table_cache 指定表的高速缓存的大小,当mysql访问一个表的时候,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。
open_tables 表示当前打开的表缓存数,如果执行flush tables操作,则此系统会关闭一些当前没有使用的表缓存而使得此状态值减小;
opend_tables 表示曾经打开的表缓存数,会一直进行累加,如果执行flush tables操作,值不会减小。
在mysql默认安装情况下,table_cache的值在2G内存以下的机器中的值默认时256到512,如果机器有4G内存,则默认这个值是2048,但这决意味着机器内存越大,这个值应该越大,因为table_cache加大后,使得mysql对SQL响应的速度更快了,不可避免的会产生更多的死锁(dead lock),这样反而使得数据库整个一套操作慢了下来,严重影响性能。所以平时维护中还是要根据库的实际情况去作出判断,找到最适合你维护的库的table_cache值。
在谈谈key_buffer_size
key_buffer_size 这个参数是用来设置索引块(index blocks)缓存的大小,它被所有线程共享,严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。那我们怎么才能知道key_buffer_size 的设置是否合理呢,一般可以检查状态值Key_read_requests和Key_reads,比例key_reads / key_read_requests应该尽可能的低,比如1:100,1:1000 ,1:10000。
Variable_name Value
Key_read_requests 20948
Key_reads 69
key_reads / key_read_requests=69: 20948≈1:300
所以比较大,性能状况欠佳
二 :尽量把 left join 转为join
三 :explain的使用
返回结果:
Id: SELECT识别符
select_type: SELECT类型
Table:输出的行所引用的表
Type:联接类型
possible_keys:指出MySQL能使用哪个索引在该表中找到行
Key:显示MySQL实际决定使用的键(索引)
key_len:显示MySQL决定使用的键长度
Ref:显示使用哪个列或常数与key一起从表中选择行
Rows:显示MySQL认为它执行查询时必须检查的行数
Extra:该列包含MySQL解决查询的详细信息
四 :添加索引:
添加索引的原则
1 较频繁的作为查询条件的字段应该添加索引
2 唯一性太差的字段不应该添加索引
3 更新太频繁的字段不适合创建索引
4 不会出现在where子句中的字段不应该创建索引