CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他数据库开发 >  MySQL/Postgresql

mysql语句执行效率的优化问题

楼主lobatt(网络爬虫)2006-03-20 16:43:51 在 其他数据库开发 / MySQL/Postgresql 提问

我现在有一个百万行的数据库,里面有相应规模的数据表,但是可能每次查询更新的行数不会超过20000行,因为用到了联表查询,特别的慢,有什么办法可以优化一下吗?  
  我虽然在where语句里加了筛选条件,但是仿佛联表的时候还是把全部的联上了 问题点数:50、回复次数:6Top

1 楼lobatt(网络爬虫)回复于 2006-03-20 16:47:27 得分 0

ps:我的数据库是mysql4.1   是为了能支持更新中的嵌套查询特地升级的,仿佛效率比3.2低好多Top

2 楼hy2003fly()回复于 2006-03-20 18:34:49 得分 20

EXPLAIN   sql执行语句     分析一下为什么为这么慢  
   
  mysql>   SELECT   COUNT(*)   FROM   Headline   WHERE   ExpireTime   >=   1112201600;  
   
  +----------+  
   
  |   COUNT(*)   |  
   
  +----------+  
   
  |           3971   |  
   
  +----------+  
   
  1   row   in   set   (1.04   sec)  
   
   
   
  mysql>   EXPLAIN   SELECT   COUNT(*)   FROM   Headline   WHERE   ExpireTime   >=   1112201600   \G  
   
  ***************************   1.   row   ***************************  
   
                        id:   1  
   
      select_type:   SIMPLE  
   
                  table:   Headline  
   
                    type:   ALL  
   
  possible_keys:   NULL  
   
                      key:   NULL  
   
              key_len:   NULL  
   
                      ref:   NULL  
   
                    rows:   302116  
   
                  Extra:   Using   where  
   
  1   row   in   set   (0.00   sec)  
  The   NULL   value   in   the   key   column   of   the   EXPLAIN   output   tell   us   that   MySQL   won't   be   using   an   index   for   this   query.   In   fact,   the   NULL   value   in   the   possible_keys   column   tells   us   that   there   were   no   indexes   to   pick   from   at   all.   If   this   type   of   query   is   likely   to   be   common,   we   can   simply   add   an   index   and   rerun   the   query   (or   the   EXPLAIN)   to   verify   that   MySQL   uses   it.  
   
  Top

3 楼da21(遇见)回复于 2006-03-20 18:46:59 得分 10

具体语句具体分析!  
  能给出语句看看吗?Top

4 楼lobatt(网络爬虫)回复于 2006-03-20 21:04:54 得分 0

是这样的,我的数据库里有1400000记录,我把id号大于1380000的记录项的某一列值置为0  
  例如:  
  update   foo   set   bar=0   where   id   >=1380000  
   
  这样一条语句需要花上50多秒  
  而我实际的程序中还需要联表查询...  
  比如说  
  update   foo   left   join   foo1   on   foo.id   =   foo1.id   set   bar   =   0   where   bar   =   1   and   foo1.bar1=0    
   
  仿佛联表的时候并没有先考虑where中的条件,所以特别慢...  
  原来我自己写了一个程序,每1000条记录更新一次,但是这样就要先把记录取出来  
  执行的语句也要多很多...所以升级到4.1,想用嵌套查询来节省时间,但是实际效果并不为我想像得那么好  
  虽然小规模数据的时候看起来更快,但是到了大规模之后却仿佛更慢了  
  而且慢得不可忍受...Top

5 楼XqYuan()回复于 2006-03-20 21:14:22 得分 20

索引Top

6 楼XqYuan()回复于 2006-03-20 21:15:19 得分 0

用到order   by和做为条件的部分建索引Top

相关问题

  • mysql语句执行时出错?
  • 怎样分析sql语句的执行计划?怎样根据执行计划来优化sql语句?
  • 这个赋值语句还能优化吗?这样执行太慢慢慢了????????????????
  • mysql中如何用mysql_query()一次执行多个insert语句?
  • mysql上执行的sql语句是不是有长度限制?
  • SQL语句出错,但是在MYSQL里可以执行——急!!
  • winexec 没有执行mysql的导入语句,为什么?
  • Union语句优化
  • 求优化语句
  • 优化sql语句

关键词

  • 语句
  • 数据库
  • 查询
  • mysql
  • null
  • 联表
  • explain
  • 更新
  • foo
  • headline

得分解答快速导航

  • 帖主:lobatt
  • hy2003fly
  • da21
  • XqYuan

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo