查询优化:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

       1 索引index 

              where order by group by

              添加在值很少重复 ,查询字段中经常用到

              存储引擎:

                     innodb --cluster聚簇索引

                     memory----hash索引

                     myisam----B-tree Fulltext

              索引是否有用 show status like 'Handler'

                            显示中Handler_read_rnd_next 值高的话说明索引设计的不好

                            Handler_read_key 值越高说明索引设计的越好

              表优化和检查 ANALYZE TABLE stu;

 

查询分析:explain 适用于复杂的查询语句

       explain select * from stu 可以分析出该语句的信息 是否用到索引,查询类型等

       显示中type 显示 ALL 最差的查询 const 最精确的查询 index 用的索引

              rows 返回多少行

       使用索引加速查询:

              show index from stu;显示stu表的索引

              ALTER TABLES stu ADD INDEX mycourse(course); 添加索引

连接和子查询:

       原则:  1、能用连接最好不用子查询

              2、使用会话变量即临时表来替代子查询(临时表 内存表)

                     select name from stu where age > (select AVG(age) from stu)

                     select @avg:AVG(age) from stu

                     explain select name from stu where age >@avg

              3、临时表不能大于系统限定的临时表 ,当大于时会将临时表的结果保存至外存中 会拖慢查询速度

                     show global variables like %heap% 设置其大小

              4、显式使用字段,避免使用通配符*

              5、尽可能对连接的字段使用索引

查询缓存:

        show variables like '%query_cache%';

       query_cache_limit 1048576 返回结果查过1M就不给其进行缓存 单位字节

       query_cache_size 1048576 内存中使用缓存的大小

       SET GLOBAL query_cache_size=10*1024*1024 设置内存中缓存使用大小10M

       query_cache_type ON ---> 1使用缓存 0 不使用缓存 2 按需缓存 ON 符合缓存条件的语句都给其缓存

      

       查询语句要风格一致 要么都大写要么都小写 不一致会导致缓存设置形同虚设

开机自动开启缓存 vim /etc/my.cnf 将设置添加到[mysqld]

 

对事务进行优化:

              1、尽可能使用小事务 KISS (Keep It SimpleStupid)

              2、选择适合的隔离级别,隔离级别越高性能越低 但是数据安全就越高

                     show variables like '%tx%'; 查看事务级别

              3、尽可能避免死锁: 级别越低死锁的可能性就越低

             

对存储例程优化: 能不用尽可能不用存储例程

              1、代码尽可能简短,遵循KISS法则

              2、优化存储例程中的每一个SQL语句;

 

总结:

       事先的优化设计比事后的优化要好的多

       对表设计进行优化

 

服务器级别的优化:

       table_open_cache :对表名缓存优化 mysql中打开的表在内存中表数目的优化

       show global variables like '%cache%'

              table_open_cache

       show global variables like '%key%'

              key_buffer_size 数值尽可能的大

      

       read_buffer_size 读缓存大小

       thread_cache_size 线程缓存大小 数值要大些

       binlog_cache_size

       sort_buffer_siza 排序的buffer大小

       show global variables like '%innodb%'

              innodb_thread_concurrency 一般为cpu个数*2

 

mysql的性能测试工具:

              1、组件mysql自身测试工具的sql-bench

                 /usr/local/mysql/sql-bench 是一些perl脚本

                 要安装 perl perl-DBI perl-DBD-MySQL才能运行

              2mysqlslap

              3super smark

              4.sysbench