站长资讯网
最全最丰富的资讯网站

分享Mysql优化思路

一、总体优化思路

首先构建脚本观察查询数,连接数等数据,确定环境原因以及内部SQL执行原因,然后根据具体原因做具体处理。

推荐:《mysql视频教程》

二、构建脚本观察状态

mysqladmin -uroot -p  ext G

该命令可获取当前查询数量等信息,定时轮询并将结果重定向到文本中,然后处理成图表。

三、处理对策

1.若是规律性出现查询慢,考虑缓存雪崩问题。

对于该问题只需将缓存的失效时间处理成不要相近时间同时失效,失效时间尽量离散化,或者集中到午夜失效。

2.若非规律性查询缓慢,考虑设计缺乏优化

处理方法:

a:开启profiling记录查询操作,并获取语句执行详细信息

show variables like '%profiling%'; set profiling=on; select count(*) from user;  show profiles; show profile for query 1; >>> +--------------------------------+----------+ | Status                         | Duration | +--------------------------------+----------+ | starting                       | 0.000060 | | Executing hook on transaction  | 0.000004 | | starting                       | 0.000049 | | checking permissions           | 0.000007 | | Opening tables                 | 0.000192 | | init                           | 0.000006 | | System lock                    | 0.000009 | | optimizing                     | 0.000005 | | statistics                     | 0.000014 | | preparing                      | 0.000017 | | executing                      | 0.001111 | | end                            | 0.000006 | | query end                      | 0.000003 | | waiting for handler commit     | 0.000015 | | closing tables                 | 0.000011 | | freeing items                  | 0.000085 | | cleaning up                    | 0.000008 | +--------------------------------+----------+

b:使用explain 查看语句执行情况,索引使用,扫描范围等等

mysql> explain select count(*) from goods G *************************** 1. row ***************************            id: 1   select_type: SIMPLE         table: goods    partitions: NULL          type: index    possible_keys: NULL           key: gid       key_len: 5           ref: NULL          rows: 3      filtered: 100.00         Extra: Using index

c:相关优化手法

表的优化与列类型选择

列选择原则:

1:字段类型优先级 整型 > date,time > char,varchar > blob

原因:整型,time运算快,节省空间

char/varchar要考虑字符集的转换与排序时的校对集,速度慢

blob无法使用内存临时表

2:够用就行,不要慷慨(如 smallint,varchar(N))

原因:大的字段浪费内存,影响速度

以varchar(10), varchar(300)存储的内容相同,但在表联查时,varchar(300)要花

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号