1. 以root用户登入mysql,执行如下语句开启慢查询日志:
set global slow_query_log=1;
set long_query_time=3; 

注: 以上设置为临时的,重启就没了,如果需要长期打开慢查询日志可以在配置
文件my.cnf中加入如下:
[mysqld]
--slow_query_log[={0|1}  //0为关闭,1为开启,默认为0
--long_query_time= n        //n为慢查询的标准时间,默认为10,这个参数建议不
再配置文件中设置而直接使用默认值, 然后根据实际需求在mysql客户端中使用
set long_query_time=m 来动态设置

2. 开启测试程序, 在进行完第一步之后,需要把之前的应用到mysql的连接重连
下,以使设置对新会话生效。

3. 执行完业务之后,查看慢查询日志:
a. 如果不知道慢查询日志的位置,在mysql命令行客户端执行如下命令:
      show variables like "�tadir%";
      可以查看到当前mysql的数据目录。
      进入该目录,文件名末尾是slow.log的文件就是慢查询日志文件
b. 然后在shell中执行如下命令
      mysqldumpslow -s c -r 10 慢查询日志文件
      //上面这个命令可以把出现次数最多的10种类型的慢查询显示出来,如果想更
多可以把10调大。
      如果想以其他方式进行排序,可以参考帮助文档: mysqldumpslow --help

4. 得到执行效率有问题的sql语句之后,
a. 使用explain语句查看执行计划,
    如果是select语句直接  explain select....
                                                             
    如果是带where条件的update delete语句,
                  将update和delete替换为select * from XXX where....

b. 看explain语句返回的查询计划中索引使用情况
            . 是否该语句有使用索引
            . 该语句是否使用了期望的索引

c. 根据explain分析的结果调整应用对索引使用或调整表的索引
            . 如果使用联合索引, index(c1,c2,c3), 应用的sql语句中应使用索引c1
或c1,c2 或c1,c2,c3来使用该索引。    (sql语句中使用c1,c3或c2,c3是不会使用
该索引的)
            . 尽量避免在主键中包含大字段,如一个 varchar(100)之类的,因为这非
常的消耗内存, 可以考虑用一个自增的int id作为主键,然后把需要的打字段设
为索引
            . 应用程序的sql语句要尽量避免对主键的修改
            . 对于ndb或memroy引擎的表来说,如果索引的使用基本都是按照a=b的模
式的话,可以只使用hash索引
         
            . 如果应用对于数据库的操作是写多读少的话,关闭query cache:
                      set global query_cache_size=0; //这个为临时,重启失效
                      活在配置文件中
                      [mysqld]
                          --query_cache_size=0                            //这个是永久的
            . 避免建过多的索引,这样非常影响修改的性能
            . 如果一个索引可以确定非空,那么在声明的时候加上not null
            . 如果可以确定索引唯一的话,那么声明为unique
            . 对于比较大的字段可以考虑使用前缀索引,即只所以该字段的前面几个
字节
                如 a varchar(50),    index (a(10)).
                这样可以节省内存,但会降低索引的唯一性。
            . 如果表中的索引主要用于 等值比较 即使用“=”进行条件判断的话 并且是唯一的话 即unique,那么可以只使
          用hash索引:
                例如
                  create table t1 (a int primary key, b char(10) not null,