`
xudongcsharp
  • 浏览: 477276 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQL常用优化

 
阅读更多


1.查询的模糊匹配
  尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用。
  解决办法:
  其实只需要对该脚本略做改进,查询速度便会提高近百倍。改进方法如下:
        a、修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就帮忙定位到具体的供应商,这样在调用后台程序时,这列就可以直接用等于来关联了。
        b、直接修改后台——根据输入条件,先查出符合条件的供应商,并把相关记录保存在一个临时表里头,然后再用临时表去做复杂关联

2.索引问题
  在做性能跟踪分析过程中,经常发现有不少后台程序的性能问题是因为缺少合适索引造成的,有些表甚至一个索引都没有。这种情况往往都是因为在设计表时,没去定义索引,而开发初期,由于表记录很少,索引创建与否,可能对性能没啥影响,开发人员因此也未多加重视。然一旦程序发布到生产环境,随着时间的推移,表记录越来越多,这时缺少索引,对性能的影响便会越来越大了。
  这个问题需要数据库设计人员和开发人员共同关注

  法则:不要在建立的索引的数据列上进行下列操作:
  避免对索引字段进行计算操作
  避免在索引字段上使用not,<>,!=
  避免在索引列上使用IS NULL和IS NOT NULL
  避免在索引列上出现数据类型转换
  避免在索引字段上使用函数
  避免建立索引的列中使用空值。

3.复杂操作
  部分UPDATE、SELECT 语句 写得很复杂(经常嵌套多级子查询)——可以考虑适当拆成几步,先生成一些临时数据表,再进行关联操作

4.update
  同一个表的修改在一个过程里出现好几十次,如:
                update table1
                set col1=...
                where col2=...;
               
                update table1
                set col1=...
                where col2=...
                ......

        象这类脚本其实可以很简单就整合在一个UPDATE语句来完成(前些时候在协助xxx项目做性能问题分析时就发现存在这种情况)

5.在可以使用UNION ALL的语句里,使用了UNION
  UNION 因为会将各查询子集的记录做比较,故比起UNION ALL ,通常速度都会慢上许多。一般来说,如果使用UNION ALL能满足要求的话, 务必使用UNION ALL。还有一种情况大家可能会忽略掉,就是虽然要求几个子集的并集需要过滤掉重复记录,但由于脚本的特殊性,不可能存在重复记录,这时便应该使用UNION ALL,如xx模块的某个查询程序就曾经存在这种情况,见,由于语句的特殊性,在这个脚本 中几个子集的记录绝对不可能重复,故可以改用UNION ALL)

6.在WHERE 语句中,尽量避免对索引字段进行计算操作
  这个常识相信绝大部分开发人员都应该知道,但仍有不少人这么使用,我想其中一个最主要的原因可能是为了编写方便吧,但如果仅为了编写简单而损害了性能,那就不可取了

  9月份在对XX系统做性能分析时发现,有大量的后台程序存在类似用法,如:

  ......
  where trunc(create_date)=trunc(:date1)
  虽然已对create_date 字段建了索引,但由于加了TRUNC,使得索引无法用上。此处正确的写法应该是
  where create_date>=trunc(:date1) and create_date
  或者是
  where create_date between trunc(:date1) and trunc(:date1)+1-1/(24*60*60)
  注意:因between 的范围是个闭区间(greater than or equal to low value and less than or equal to high value.),
  故严格意义上应该再减去一个趋于0的小数,这里暂且设置成减去1秒(1/(24*60*60)),如果不要求这么精确的话,可以略掉这步

7.对Where 语句的法则
  7.1 避免在WHERE子句中使用in,not  in,or 或者having。
  可以使用 exist 和not exist代替 in和not in。
  可以使用表链接代替 exist。
  Having可以用where代替,如果无法代替可以分两步处理。
  例子
  SELECT *  FROM ORDERS WHERE CUSTOMER_NAME NOT IN
                    (SELECT CUSTOMER_NAME FROM CUSTOMER)
  优化
  SELECT *  FROM ORDERS WHERE CUSTOMER_NAME not exist
                    (SELECT CUSTOMER_NAME FROM CUSTOMER)
  7.2 不要以字符格式声明数字,要以数字格式声明字符值。(日期同样)
  否则会使索引无效,产生全表扫描。
  例子
  使用:SELECT emp.ename, emp.job FROM emp WHERE emp.empno = 7369;
  不要使用:SELECT emp.ename, emp.job FROM emp WHERE emp.empno = ‘7369’

  8.对Select语句的法则
  在应用程序、包和过程中限制使用select * from table这种方式。

  例子
  使用
  SELECT empno,ename,category FROM emp WHERE empno = '7369‘
  而不要使用
  SELECT * FROM emp WHERE empno = '7369'

  9. 排序
  避免使用耗费资源的操作
  带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引 执行,耗费资源的排序(SORT)功能。DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序

  10.临时表
  慎重使用临时表可以极大的提高系统性能。
分享到:
评论

相关推荐

    SQL常用优化方法

    `sql常用优化方法.chm`文件可能包含了一些实用的SQL性能监控和调优工具,例如SQL Profiler,它可以帮助识别慢查询,找出性能瓶颈。通过这些工具,你可以实时监控数据库性能,进行针对性优化。 总结,SQL性能优化是...

    sql常用优化方法.chm

    sql常用优化方法,囊括了所有的优化方法,很值得收藏。

    SQL常用优化脚本,优化SQL语句

    ### SQL优化脚本详解 在数据库管理与维护中,SQL语句的性能优化至关重要,它直接影响到系统的响应速度和资源利用率。以下是从给定文件中提取并解析的关键SQL优化脚本,涵盖数据库缓存管理、资源状态监控、空间使用...

    SQL优化 SQL优化软件 SQL优化工具

    在Oracle环境中,常用的SQL优化工具包括Oracle SQL Developer、Toad for Oracle、SQL Server Management Studio (尽管它是针对SQL Server的)等。这些工具不仅提供了上述功能,还专门针对Oracle数据库的特性进行了...

    基于mysql的sql常规优化

    sql常用优化手段

    SQL Server2008常用优化脚本.txt

    SQL Server常用优化脚本,包含查询某个数据库的连接数,前10名其他等待类型,CPU的压力,表现最差的前10名使用查询

    必须掌握的30种SQL语句优化

    便于Java入门人员交流学习。可以深刻理解该语言的常用API。帮助初学者尽快入门。

    sql命令优化小窍门

    本文总结了一些常用的 SQL 命令优化小窍门,旨在帮助提高查询速度和数据库性能。 一、索引 索引是 SQL 优化的基本要素,好的索引设计可以提高查询速度和数据库性能。索引的建立需要合理的设计,考虑到查询的分析和...

    最新整理的常用sql语句及优化大全

    一、SQL常用语句 1. **数据查询**:`SELECT`语句是SQL中最基本的查询语句,用来从表中获取数据。例如,`SELECT * FROM table_name`将返回表中的所有列。更高级的查询包括`WHERE`子句来过滤结果,`GROUP BY`进行分组...

    mysql优化sql语句的优化(索引,常用小技巧.)

    ### MySQL优化之SQL语句与索引优化 #### 数据库设计合理性 在MySQL数据库的优化过程中,合理设计数据库(表)至关重要。一个合理的数据库设计能够有效地提高查询性能、减少数据冗余并确保数据完整性。 - **3NF**...

    sql优化的几种方法

    ### SQL优化的关键方法 #### 一、选择最有效的表名顺序 在构建SQL查询时,尤其是在涉及多个表的连接查询中,表名的顺序对于查询性能有着重要影响。Oracle数据库的解析器是从右向左处理FROM子句中的表名。为了优化...

    MySQL数据库优化SQL篇PPT课件.pptx

    MySQL数据库优化SQL篇PPT课件.pptx 本PPT课件主要讲述了MySQL数据库优化的重要知识点,特别是SQL优化方面的内容。从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和...

    SQL 优化常用原则

    SQL语句 优化常用原则。 1. 选用适合的ORACLE优化器

    sql单表优化,公司项目常用

    SQL 单表优化,公司项目常用 本文旨在总结 SQL 单表优化的相关知识点,涵盖 MySQL 的基本架构、SQL 优化原因、索引定义、索引类型、索引创建等方面。 MySQL 基本架构 MySQL 的基本架构可以分为四层:连接层、服务...

    SQL取数步骤级常用优化参数修改说明.docx

    "SQL取数步骤级常用优化参数修改说明" 在本文档中,我们将讨论 SQL 取数步骤级常用优化参数修改的相关知识点。 SQL 取数步骤级常用优化参数修改 SQL 取数步骤级常用优化参数修改是指在 SQL 取数过程中,对参数...

    MySQL技术内幕 SQL编程及优化.pdf

    2.4常用SQL优化 2.5常用SQL技巧 3.优化数据库对象 3.1优化表的数据类型逆规范化 3.2提高查询速度 4.锁问题 4.1MyISQM表锁 4.2InnoDB锁问题 5.优化MySQL Server 5.1MySQL体系结构概览内存管理及优化 5.2...

    SQL性能优化技巧分享 SQL性能优化技巧.docx

    INSERT、UPDATE和DELETE语句也是SQL语句中最常用的语句,优化这些语句可以提高整个数据库的性能。可以使用以下技巧来优化这些语句: * 使用批量操作 * 使用事务处理 * 限制操作的行数 3. PL/SQL优化技巧 PL/SQL是...

    《基于Oracle的SQL优化》PDF版本下载.txt

    根据提供的文件信息,本文将对《基于Oracle的SQL优化》这一主题进行深入解析,包括但不限于SQL优化的重要性、Oracle数据库的特点以及具体的SQL优化方法等。 ### SQL优化的重要性 SQL(Structured Query Language)...

Global site tag (gtag.js) - Google Analytics