仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 941|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL教程之利用索引的误区之二:利用了 和 != 操...

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-16 22:37:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用索引利用索引的误区之二:利用了和!=操纵符,招致查询不利用索引
起首,请记着这个结论:

利用了和!=后,就不会利用索引



比方,上面的例子利用了,以是查询没有效到索引

selectempnofromempwhereempno10;



PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

--------------------------------------------------------------------

|Id|Operation|Name|Rows|Bytes|Cost|

--------------------------------------------------------------------

|0|SELECTSTATEMENT|||||

|*1|TABLEACCESSFULL|EMP||||

--------------------------------------------------------------------

PredicateInformation(identifiedbyoperationid):

---------------------------------------------------

1-filter("EMP"."EMPNO"10)

Note:rulebasedoptimization



14rowsselected





将下面的查前提“empno10”转换成“empno<10andempno>10”后,就能够利用索引了

selectempnofromempwhereempno<10andempno>10;



PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

--------------------------------------------------------------------

|Id|Operation|Name|Rows|Bytes|Cost|

--------------------------------------------------------------------

|0|SELECTSTATEMENT|||||

|*1|INDEXRANGESCAN|EMP_ID1||||

--------------------------------------------------------------------

PredicateInformation(identifiedbyoperationid):

---------------------------------------------------

1-access("EMP"."EMPNO">10AND"EMP"."EMPNO"<10)

Note:rulebasedoptimization



14rowsselected



SQL>



再看上面的例子:

因为利用了前导列,以是利用了索引,前面的"!="是从索引局限扫描的了局中选择符合的纪录的

selectempnofromempwhereempno<=10andename!=RICH;



PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

--------------------------------------------------------------------

|Id|Operation|Name|Rows|Bytes|Cost|

--------------------------------------------------------------------

|0|SELECTSTATEMENT|||||

|*1|INDEXRANGESCAN|EMP_ID1||||

--------------------------------------------------------------------

PredicateInformation(identifiedbyoperationid):

---------------------------------------------------

1-access("EMP"."EMPNO"<=10)

filter("EMP"."EMPNO"<=10AND"EMP"."ENAME"RICH)

Note:rulebasedoptimization



15rowsselected





再做一个实验:

SQL>descdept

NameTypeNullableDefaultComments

-----------------------------------------

DEPTNONUMBER(2)Y

DNAMEVARCHAR2(14)Y

LOCVARCHAR2(13)Y



创立一个单键索引:

SQL>createindexdept_id1ondept(dname);



Indexcreated



假如利用"",则查询不利用索引:

selectdepTnofromdeptwherednameDEVELOPER;



PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

--------------------------------------------------------------------

|Id|Operation|Name|Rows|Bytes|Cost|

--------------------------------------------------------------------

|0|SELECTSTATEMENT|||||

|*1|TABLEACCESSFULL|DEPT||||

--------------------------------------------------------------------

PredicateInformation(identifiedbyoperationid):

---------------------------------------------------

1-filter("DEPT"."DNAME"DEVELOPER)

Note:rulebasedoptimization



14rowsselected



将前提修正为“dname<DEVELOPERanddname>DEVELOPER”,则可使用索引

selectdeptnofromdeptwheredname<DEVELOPERanddname>DEVELOPER;



PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

---------------------------------------------------------------------------

|Id|Operation|Name|Rows|Bytes|Cost|

---------------------------------------------------------------------------

|0|SELECTSTATEMENT|||||

|1|TABLEACCESSBYINDEXROWID|DEPT||||

|*2|INDEXRANGESCAN|DEPT_ID1||||

---------------------------------------------------------------------------

PredicateInformation(identifiedbyoperationid):

---------------------------------------------------

2-access("DEPT"."DNAME">DEVELOPERAND"DEPT"."DNAME"<DEVELOPER)

Note:rulebasedoptimization



15rowsselected



SQL>




BDB源自BerkeleyDB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性
若相依 该用户已被删除
7#
发表于 2015-3-23 09:09:28 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
若天明 该用户已被删除
6#
发表于 2015-3-9 16:58:49 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
兰色精灵 该用户已被删除
5#
发表于 2015-2-28 00:20:18 | 只看该作者
另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-9 22:15:09 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
莫相离 该用户已被删除
板凳
发表于 2015-2-4 10:46:03 | 只看该作者
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
只想知道 该用户已被删除
沙发
发表于 2015-1-25 22:41:06 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
爱飞 该用户已被删除
楼主
发表于 2015-1-19 19:13:49 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表