文档介绍:MySQL优化
Begin for qingwei
淘宝网
1
摘要
查询优化
Mysql性格探测
索引简介
Explain语法
配置参数调优
Tips
mysqlDBA常用配置项目
2
查询优化
:表缓存(table_cache ),
SHOW STATUS LIKE ’Opened_tables’;
某个数据表必须打开的次数 。如果这个数字增长得很快,就意味着这个缓存太小了
2. 索引使用:
. 对于MyISAM表频,繁地索引可能引起索引文件比数据文件更快地达到最大限制
. InnoDB, InnoDB共享表空间并不受操作系统的文件大小限制
,包含不同值的数量,列中包含很多不同的值,重复的值很少 ,工作效率越好
,更少的I/O, InnoDB和BDB等使用聚簇索引,数据行和主键值存储在一起,其它的索引都是次级索引 ,它们被用于定位数据行 ,如果主键值很长,每个次级索引就需要更多的额外空间
(leftmost)前缀 .
state, city, zipstate, citystate
3
查询优化
NULL 与 IS NOT NULL
不能用null作索引,任何包含null值的列都将不会被包含在索引中
* from employee where last_name like ‘%cliton%’ ,不能使用索引
EXIST,系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项 , IN首先执行子查询,结果列表存放在在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询
mysql -udpd - -pdpd -P3307 dpd_magazine
select id from item where status=1 and not exists (select item_id from item_ item_);
select id from item where status=1 and id not in (select item_id from item_file);
4
查询缓冲
SHOW STATUS LIKE 'qcache%';
Qcache_free_blocks中相邻内存块的个数,数目大可能有碎片
Qcache_free_memory缓存中的空闲内存
Qcache_hits,Qcache_insert命中次数除以插入次数就是不中比率
Qcache_not_cache
Qcache_lowmem_prunes 缓存内存不足
Qcache_queries_in_cache
cache_total_size 缓存中块的数量
Qcache_inserts : 多少次未命中然后插入的.
Qcache_hits : 多少次命中的.
查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%缓存的命中率 = Qcache_queries_in_cache/Com_select
2. SHOW STATUS LIKE 'open%tables';
Open_tables | 5000 || Opened_tables | 195
有 5,000 个表是打开的,有 195 个表需要打开
5
查询缓存
%SHOW STATUS LIKE 'threads%';
Threads_cached :连续执行 SHOW STATUS 命令时快速增加 ,需要增大此值
%SHOW STATUS LIKE 'created_tmp%';
%SHOW STATUS LIKE "sort%";
sort_merge_passes 很大,就表示需要注意 sort_buffer_size
6
MySQL性能探测- \s
mysql> \s
--------------
Mysql Ver Distrib , for unknown- (i386) using readlin