免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1394 | 回复: 0
打印 上一主题 下一主题

sql优化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-28 18:40 |只看该作者 |倒序浏览
优化sql语句的一般步骤:
1.通过show status like 'Com_%';了解各种sql的执行频率
2.通过explain分析sql的执行计划:
  explain select * from student where studentname='吴笑笑'\G;
其中有rows行,表示扫描行的数量,本例中为2,即扫描2行。
3.确定问题并采取相应的优化策略
在student表上创建索引:
create index name on student(StudentName);
在执行:explain select * from student where studentname='吴笑笑'\G;
rows行变为1了,可见索引提高了搜索效率

索引问题:
索引的存储分类:
MyISAM和InnoDB目前只支持btree索引,mysql目前不支持函数索引,但是能对列的前卖弄某一部分进行索引,例如name字段,可以只取那么的前4个字符进行索引,create index index_name on table_name(name(4))

使用索引:
1.对于创建的多列索引,只要查询条件用到了最左边的列,索引一般就会被使用
2.使用like的查询,后面如果是常量并且只有%号不在第一个字符,索引会被使用。
3.如果列名是索引,使用column_name is null将使用索引。
存在索引但是不使用索引:
1.如果mysql估计使用索引比不使用索引慢,则不使用索引
2.如果使用mymory/heap表,并且where条件中不使用“=”进行索引列,那么不会用到索引
3.使用or分隔的条件,如果or前的条件中的列有索引,而后面的列没有索引,那么索引就不会被使用
4.如果列类型是字符串,那么一定要记得在where条件中把字符串用引号括起来。
查看索引使用情况:
show status like 'Handler_read%'
如果索引正在使用,handler_read_key的值将很高,如果很低表名增加索引得到的性能并没有改善,因为索引不经常使用
handler_read_rnd_next:的值高就意味着查询运行低效,要建立索引补救

两个使用的而优化方案:
定期的分析表和检查表
analyze table table_name;
check table table_name;
定期优化表:
optimize table table_name

常用的sql优化:
1.大批量插入数据:
  对于MyISAM表:
alter table table_name disable keys;
load the data(load data file '/home/wuxiaoxiao/1.txt' into table table_name)
alter table table_name enable keys;
  对于InnoDB表:
    a.将导入的数据按照主键的顺序排列好
    b.在导入数据前执行set unique_checks=0关闭唯一性校验
      在导入数据之后执行set unique_checks=1
    c.导入前执行set autocommit=0
      导入之后执行set atocommit=1
2.优化group by:如果查询包括group by但是用户想要避免排序结果的消耗,可以指定order by null

使用sql提示:
1.use index:在查询语句后面添加use index来提供希望mysql去参考的索引列表
  select * from student use index (name) where studentid=1;
2.ignore index:忽略索引
  select * from student ignore index(name) where studentid=1;
3.force index:强制使用索引:
  select * from student force index(name) where studentid>0;




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/76927/showart_1671284.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP