SQL优化原则和技巧.ppt_第1页
SQL优化原则和技巧.ppt_第2页
SQL优化原则和技巧.ppt_第3页
SQL优化原则和技巧.ppt_第4页
SQL优化原则和技巧.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL优化原则和技巧,撰写人:石霖,能使查询加快的途径,索引的引用SQL的优化一些函数的使用技巧,索引的引用(1),当插入的数据为数据表中的记录数量的10%以上,首先需要删除该表的索引来提高数据的插入效率,当数据插入后,再建立索引。,索引的引用(2),避免在索引列上使用函数或计算,在where子句中,如果索引是函数的一部分,优化器将不再使用索引而使用全表扫描。如:低效:select*fromreport_sale_accountwherehsjj*101000;高效:select*fromreport_sale_accountwherehsjj1000/10;,索引的引用(3),尽量避免在索引列上使用not和“!=”和“”,索引只能告诉什么存在于表中,而不能告诉什么不存在于表中,当数据库遇到not和“!=”和“”时,就会停止使用索引而去执行全表扫描。,索引的引用(4),请务必注意,检索中不要对索引列进行处理,如:TRIM,TO_DATE,类型转换等操作,破坏索引,使用全表扫描,影响SQL执行效率,索引的引用(5),避免在索引列上使用ISNULL和ISNOTNULL避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引对于单列索引,如果列包含空值,索引中将不存在此记录;对于复合索引,如果每个列都为空,索引中同样不存在此记录。如果至少有一个列不为空,则记录存在于索引中因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引,索引的引用(6),索引列上“=”代替“”低效:select*fromreport_sale_accountwherehsjj10;高效:select*fromreport_sale_accountwherehajj=10.000000000000001;,SQL的优化技巧(1),Where子句中的连接顺序:oracle采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须写在其他where条件之前,那些可以过滤掉大量记录的条件必须写在where子句的末尾。,SQL的优化技巧(1),例如低效:select*fromreport_sale_accountewherehsje5000anddzxl=000001and255000anddzxl=000001;,SQL的优化技巧(2),删除全表时,用truncate替代delete,同时注意truncate只能在删除全表时适用,因为truncate是ddl而不是dml。例如删除掉一个100万行的数据。Truncatetablereport_sale_account;比deletefromreport_sale_account;至少快1000倍。,SQL的优化技巧(3),尽量多使用commit:只要有可能就在程序中对每个delete、insert、update操作尽量多使用commit,这样系统性能会因为commit所释放的资源而大大提高。,SQL的优化技巧(4),用exists替代in,可以提高查询的效率。低效SELECT*FROMREPORT_SALE_ACCOUNTWHERECOM_CODENOTIN(SELECTCODEFROMBASEINFO_GOODSWHEREDZXL=000001)高效SELECT*FROMREPORT_SALE_ACCOUNTWHERENOTEXISTS(SELECTCODEFROMBASEINFO_GOODSWHERECODE=REPORT_SALE_ACCOUNT.COM_CODEANDDZXL=000001),SQL的优化技巧(5),优化groupby提高groupby语句的效率,可以将不需要的记录在groupby之前过滤掉。,SQL的优化技巧(5),例如:低效:selectdzxl,avg(hsje)fromreport_sale_accountgroupbydzxlhavingdzxl=000001ordzxl=000002;高效:selectdzxl,avg(hsje)fromreport_sale_accountwheredzxl=000001ordzxl=000002groupbydzxl;,SQL的优化技巧(5),避免使用HAVING子句,HAVING只会在检索出所有记录之后才对结果集进行过滤,这个处理需要排序、统计等操作。如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。,SQL的优化技巧(6),有条件的使用union-all替代union:这样做效率会提高3到5倍。,SQL的优化技巧(7),在含有子查询的SQL语句中,要特别注意减少对表的查询,SQL的优化技巧(7),例如:低效SELECTSUM(HSJE)FROMREPORT_SALE_ACCOUNTWHEREDZXL=(SELECTDZXLFROMBASEINFO_GOODSWHERECODE=0001)ANDPP=(SELECTPPFROMBASEINFO_GOODSWHERECODE=0001)高效SELECTSUM(HSJE)FROMREPORT_SALE_ACCOUNTWHERE(DZXL,PP)=(SELECTDZXL,PPFROMBASEINFO_GOODSWHERECODE=0001)Update多个Column同样适用于以上的例子。,SQL的优化技巧(8),SELECT子句中避免使用*当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用*是一个方便的方法,不幸的是,这是一个非常低效的方法,实际上,ORACLE在解析的过程中,会将*依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。,一些函数的使用技巧,虽然在SQL中盲目引用函数会使性能降低,但如果正确使用合适的函数不仅会使SQL可读性加强,并且能对SQL性能得到提高,使复杂的查询能很方便地实现。,一些函数的使用技巧,举例说明有如下学生成绩表(表名为TABLE),一些函数的使用技巧,我们的需求:90分或90分以上为优8089分良6079分为中60分以下为差获得以下数据姓名分数等级,一些函数的使用技巧,低效的做法:Select姓名,分数,优FromTABLEWhere分数=90UNIONALLSelect姓名,分数,良FromTABLEWhere分数=80and分数=60and分数80UNIONALLSelect姓名,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论