网络服务器软件开发/中间件开发,关注ACE/ICE/boost
C++博客
首页
新随笔
联系
聚合
管理
152 Posts :: 3 Stories :: 172 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(18)
给我留言
查看公开留言
查看私人留言
随笔分类
ACE(12)
boost(6)
C++基础(20)
CORBA(4)
Design Pattern(1)
ebook(1)
ICE(7)
java(1)
linux(28)
mysql(15)
PHP(1)
python(6)
RakNet(1)
SQLite
STL(1)
VC/MFC/.NET(4)
办公技巧(5)
编码知识(8)
创意&想法(2)
开发感想(12)
理财(2)
其它开源库(13)
生活感想(23)
数据结构算法(1)
通信技术(8)
网络服务器开发(9)
游戏开发(4)
随笔档案
2012年7月 (1)
2011年9月 (1)
2011年8月 (1)
2011年5月 (2)
2011年4月 (1)
2011年1月 (9)
2010年12月 (6)
2010年11月 (1)
2010年10月 (3)
2010年9月 (12)
2010年8月 (7)
2010年7月 (1)
2009年10月 (2)
2009年9月 (3)
2009年8月 (1)
2009年3月 (1)
2009年2月 (5)
2009年1月 (6)
2008年12月 (2)
2008年11月 (1)
2008年10月 (1)
2008年9月 (1)
2008年7月 (9)
2008年6月 (10)
2008年5月 (13)
2008年4月 (2)
2008年3月 (3)
2008年1月 (1)
2007年11月 (5)
2007年9月 (1)
2007年8月 (5)
2007年7月 (3)
2007年6月 (2)
2007年5月 (4)
2007年4月 (20)
2007年3月 (6)
文章分类
设计模式
文章档案
2007年3月 (3)
好友博客
LOGOS
搜索
积分与排名
积分 - 233656
排名 - 107
最新评论
1. re: C++实现的MD5算法
你这代码功底也够烂了,你多测试几次,内存哗哗的流...
--热心网页
2. re: std::queue的front的问题[未登录]
在c++中int并不是类,没有析构,是值拷贝。
你换std::string试试,准挂。
--星爷
3. re: mysql下如何执行sql脚本【转】[未登录]
Thanks!
--me
4. re: ldconfig几个需要注意的地方 zhuan
学习了,收藏
--thebye85
5. re: 体验RakNet的RPC3
评论内容较长,点击标题查看
--雅歌
阅读排行榜
1. mysql下如何执行sql脚本【转】(14975)
2. 怪异的boost,fatal error LNK1104: 无法打开文件“libboost_system-vc80-mt-gd-1_35.lib”(11406)
3. boost interprocess之message queue(7069)
4. 【ZT】ADSL大型技术专题(图文)(6898)
5. VOIP开源项目源码地址(二) ---[voip涉及到的所有的资料]【转帖】(5425)
评论排行榜
1. Buffer类就应该简单,直观(16)
2. 怪异的boost,fatal error LNK1104: 无法打开文件“libboost_system-vc80-mt-gd-1_35.lib”(13)
3. 自己造的一个线程类(12)
4. 对基本类型的再包装,方便了移植(12)
5. 游戏害惨了我多少同学(10)
mysql中在not in后面慎用 select子查询 及临时表的使用
有个存储过程,功能是:根据用户名查询非好友的ID,代码如下:
begin
select UserID from Users
where
UserID
!=
pUserID and
Users.UserID not
in
(
select FriendID from Users_Friend where Users_Friend.UserID
=
pUserID and DeleteFlag
=
0
)
and
Users.Name like BINARY concat(
'
%
'
,pUserName,
'
%
'
) ;
end
其中,pUserID是搜索者的UID,pUserName是要搜索的用户名。今天发现这个存储过程非常慢,分析结论是:not in 后面的select子查询是每次都执行的,这出乎意料!mysql难道不能优化掉这样的查询吗?
后来用了临时表的方案,如下:
begin
Create TEMPORARY Table IF NOT EXISTS temp(FriendID
int
);
insert into temp(FriendID) select FriendID from Users_Friend where Users_Friend.UserID
=
pUserID and DeleteFlag
=
0
;
select UserID from Users
where
UserID
!=
pUserID and
Users.UserID not
in
(
select FriendID from temp
)
and
Users.Name like BINARY concat(
'
%
'
,pUserName,
'
%
'
) ;
drop TEMPORARY table temp;
end
问题较好的解决了,因为临时表temp中保存的都是好友的ID,非常快,不用每次都去执行好友的筛选逻辑。另外一种方式是:将好友ID作为参数传递到存储过程中,在程序外面查询好友,但要改动程序。
posted on 2011-01-13 13:05
true
阅读(2946)
评论(0)
编辑
收藏
引用
所属分类:
mysql
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
mysql的加密函数
使用微软企业库连接mysql碰到的奇怪问题
mysql将查询结果保存到文件
mysql中在not in后面慎用 select子查询 及临时表的使用
mysql的unix时间戳
mysql存储过程中使用事务
转自群里面的讨论sql语句:varbinary类型,取某连续几个字节,排序
mysql自动备份脚本
mysql存储过程事务执行过程中出现异常回滚机制
360竟会自动关闭mysql
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © true