喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
     
标题: [问题] sql效率问题  
 
wpl12
高级会员
Rank: 4
初级会员



UID 68911
精华 0
积分 815
帖子 547
金钱 815 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-2-27
状态 离线
[广告]: 代充Paypal帐号美元
sql效率问题

A表中有二个字段a_id,a_name
B表中有三个字段b_id,a_id,b_type
查找的条件是所有B表中b_type所有为'1'值的对应A表中的a_name的值

select A.a_name  from A,B where B.b_type='1' and B.a_id=A.a_id.


select a_name from A where a_id in (select a_id from B where b_type='1')
以上两种样速度效速很低.要怎么优化,要等很久..
2006-8-29 11:00 AM#1
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 2573
帖子 4778
金钱 2570 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[广告]: Enom域名自助付费 自助注册 自助PUSH 主流域名COM等一律57.99元年
感觉第二种还可以
先缩小范围了 之后就快了
问题是 子查询的结果是否比较多
如果太多的话就失去了优势




最近写的一些代码都会在以下地址发布,有兴趣的来批:
http://www.phpx.com/happy/thread-131368-1-1.html
2006-8-29 11:02 AM#2
查看资料  Blog  发短消息  顶部
 
unspace (未知空间)
版主
Rank: 7Rank: 7Rank: 7
百万富翁


UID 67567
精华 0
积分 48940
帖子 5199
金钱 47841 喜悦币
威望 0
人脉 1099
阅读权限 100
注册 2005-12-28
来自 吉林
状态 离线
[推荐阅读] FedoraCore5+Apache2+PHP5+MySQL5+GD安装配置
建议使用第一个
优化应该是优化表结构
A表,a_id 加索引(如果是唯一ID,做主键)
B表,b_id同上                         a_id为索引            b_type为索引

另外可以使用这样的查询,据说效率高一些,据说而已
select A.a_name from A left join B on A.a_id=B.a_id where B.b_type='1'




7月1日起,北京市低保、最低工资标准、失业保险、工伤保险、基本养老金5项社会保障标准均将全部上调。其中,最低工资标准增加70元,提高到800元。
2006-8-29 11:06 AM#3
查看资料  访问主页  Blog  发短消息  顶部
 
akstrom (akstrom)
金牌会员
Rank: 6Rank: 6
村口大榕树上的知了


UID 24856
精华 0
积分 1075
帖子 1079
金钱 945 喜悦币
威望 0
人脉 130
阅读权限 70
注册 2003-11-27
来自 广州
状态 离线
[推荐阅读] 在次求助


QUOTE:
原帖由 unspace 于 2006-8-29 11:06 AM 发表
建议使用第一个
优化应该是优化表结构
A表,a_id 加索引(如果是唯一ID,做主键)
B表,b_id同上                         a_id为索引            b_type为索引

另外可以使用这样的查询,据说效率高一些,据 ...
据我所了解这个效率比较差,要尽量避免用 left join




电子商务系统

后台/admin
用户名密码一样admin

',“╭⌒╮⌒╮╮
  ╱◥██◣,.
︱田︱田田| '',,',.
╬╬╬╬╬╬╬╬╬╬╬╬
2006-8-29 11:11 AM#4
查看资料  访问主页  Blog  发短消息  顶部
 
wangweian
新手上路
Rank: 1



UID 77036
精华 0
积分 47
帖子 62
金钱 47 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-7-25
状态 离线
[推荐阅读] 高手们,如何将EXECL数据转换成MYSQL中的数据???
请确定 A B 表 哪个表记录少

假设B表记录少,那用B做基础表

SELECT A.a_name FROM A,B WHERE B.a_id=A.a_id AND B.b_type='1'

可能对ORACLE更有效
2006-8-29 11:16 AM#5
查看资料  发短消息  顶部
 
wpl12
高级会员
Rank: 4
初级会员



UID 68911
精华 0
积分 815
帖子 547
金钱 815 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-2-27
状态 离线
[推荐阅读] 广州诚聘PHP和设计兼职各一名
我那两种方法都试过了.查询的速度好象差不多...子查询的结果在200左右.

我的表结构是这样的:
A表,a_id (如果是唯一ID,做主键)
B表,b_id同上      

少了索引,不知道加上索引能不能带来效率提升
2006-8-29 11:16 AM#6
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
wpl12
高级会员
Rank: 4
初级会员



UID 68911
精华 0
积分 815
帖子 547
金钱 815 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-2-27
状态 离线
[推荐阅读] iconv时,文中包含GB2312和GBK时会停止,怎么办?


QUOTE:
原帖由 wangweian 于 2006-8-29 11:16 AM 发表
请确定 A B 表 哪个表记录少

假设B表记录少,那用B做基础表

SELECT A.a_name FROM A,B WHERE B.a_id=A.a_id AND B.b_type='1'

可能对ORACLE更有效
我的B表记录比较多.A记录比较少..我用的是MYSQL
2006-8-29 11:18 AM#7
查看资料  访问主页  Blog  发短消息  QQ  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.221566 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP