jackyrong

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
1 使用explain语句去查看分析结果,如
  explain select * from test1 where id=1;
会出现:
id  selecttype  table  type possible_keys  key key_len  ref rows  extra各列

  其中,type=const表示通过索引一次就找到了,key=primary的话,表示使用了主键
type=all,表示为全表扫描,key=null表示没用到索引;
  假如在test1表中,结构如下:
   id name

  假如id为自动递增,name设置了索引,则explain后,会发现
type=ref,因为这时认为是多个匹配行,在联合查询中,一般为REF


2 MYSQL中的组合索引
  假设表有id,key1,key2,key3,把三者形成一个组合索引,则
如:
   where key1=....
   where key1=1 and key2=2
    where key1=3 and key3=3 and key2=2
根据最左原则,这些都是可以使用索引的哦
   如
   from test where key1=1 order by key3
用explain分析的话,只用到了normal_key索引,但只对where子句起作用,而后面的order by需要排序


3 使用慢查询分析:
   在my.ini中:
long_query_time=1
log-slow-queries=d:\mysql5\logs\mysqlslow.log
把超过1秒的记录在慢查询日志中
  可以用mysqlsla来分析之。也可以在mysqlreport中,有如
DMS 分别分析了select ,update,insert,delete,replace等所占的百份比

4 MYISAM和INNODB的锁定
   myisam中,注意是表锁来的,比如在多个UPDATE操作后,再SELECT时,会发现SELECT操作被锁定了,必须等所有

UPDATE操作完毕后,再能SELECT
  innodb的话则不同了,用的是行锁,不存在上面问题。
5 MYSQL的事务配置项
   innodb_flush_log_at_trx_commit=1
  表示事务提交时立即把事务日志写入磁盘,同时数据和索引也更新

innodb_flush_log_at_trx_commit=0
   事务提交时,不立即把事务日志写入磁盘,每隔1秒写一次
innodb_flush_log_at_trx_commit=2
  事务提交时,立即写入磁盘文件(这里只是写入到内核缓冲区,但不立即刷新到磁盘,而是每隔1秒刷新到磁盘,同

时更新数据和索引,
posted on 2010-06-22 23:19  jackyrong的世界  阅读(441)  评论(0编辑  收藏  举报