要提高SQL查询效率where语句条件的先后次序应如何写效率更好,?

主要解释一下为什么,为什么!一定是为什么,不使用join方法,并且是两个表以上,找匹配的数据,各表数据量大小不一,... 主要解释一下为什么,为什么!一定是为什么,
不使用join方法,并且是两个表以上,找匹配的数据,各表数据量大小不一,
展开
 我来答
nomanland
2008-02-28 · TA获得超过1218个赞
知道小有建树答主
回答量:958
采纳率:0%
帮助的人:617万
展开全部
有索引的列优先,都有索引的看查询出来的数据量,少的优先

in ,not in,<>,is null,is not null 等由于不会走索引,尽量不要使用。

WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响,如

Select * from zl_yhjbqk where dy_dj = '1K以下' and xh_bz=1

Select * from zl_yhjbqk where xh_bz=1 and dy_dj = '1K以下'

以上两个SQL中dy_dj及xh_bz两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的时候99%条记录都进行dy_dj及xh_bz的比较,而在进行第二条SQL的时候0.5%条记录都进行dy_dj及xh_bz的比较,以此可以得出第二条SQL的CPU占用率明显比第一条低。

参考资料: http://hi.baidu.com/fifi521/blog/item/83de668d405ba716b21bba6b.html

simon_999
2008-02-28 · TA获得超过363个赞
知道小有建树答主
回答量:132
采纳率:0%
帮助的人:197万
展开全部
1.WHERE子句中的连接顺序
sql解析器采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾

SELECT … FROM emp e WHERE sal>50000 AND job=‘MANAGER’AND 25<(SELECT COUNT(*) FROM emp WHERE mgr=e.empno);

效率低于

SELECT… FROM emp e WHERE 25<(SELECT COUNT(*) FROM emp WHERE mgr=e.empno) AND sal>50000 AND job=‘MANAGER’;

2.选择最有效率的表名顺序
sql解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理。在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表

如果tab2中记录数明显高于tab1,用
SELECT COUNT(*) FROM tab2, tab1
效率明显优于
SELECT COUNT(*) FROM tab1, tab2

参考资料: www.pudn.com

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzqlzqlzqlzq
2008-02-28 · TA获得超过192个赞
知道小有建树答主
回答量:331
采纳率:0%
帮助的人:233万
展开全部
要提高SQL查询效率,最关键的是减少涉及查询的数据量,简单来说就是使用子查询把数据先筛选掉些。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逯权涡W
2008-02-28 · 超过38用户采纳过TA的回答
知道答主
回答量:208
采纳率:0%
帮助的人:0
展开全部
条件中最好不要使用OR 或IN 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式