zoukankan      html  css  js  c++  java
  • sql性能优化

    一.前言

      sql优化是个老生常谈的话题,本文会简单罗列一些在sql中可以用到的sql优化方法。

    二.方法

    1.创建索引

      当被问到sql查询优化问题,第一反应基本就是回答建索引了吧。索引是一种用于排序和搜索的结构,在查询数据库时可以减少对I/O的消耗。

    2.优化查询语句

      1)在查询中不要使用select *,检索不必要的列带来额外的系统开销。

      2)尽量少用distinct,它会建立一个临时表,然后根据排序来删除重复数据,会增加数据库的I/O次数和时间消耗。

      3)在查询中要减少可能引用全表扫描的操作,比如or、like('%%')、in和not in都会引起全表扫描。

    二.思路

      做sql性能优化,主要思路有两个个,1.合理设计数据表,如字段类型、建索引;2.查询语句优化。

    三.方法

      1.尽量避免在where子句中使用!=或<>操作符,否则将使引擎放弃使用索引而进行全表扫描。

      2.应考虑在where及order by涉及的列上建立索引。

      3.尽量避免在where子句中对字段进行null值判断,否则将导致全表扫描。

      4.尽量避免在where子句中使用or来连接条件,否则会导致全表扫描。

    select id from table where num =10 or num = 20
    改写为
    select id from table where num = 10 
    union all
    select id from table where num = 20

      5.尽量避免使用前置百分号。

    select id from where name like '%abc%'

      6.in和not in需要慎用,很多时候可以用exists和not exists,否则会导致全表扫描。

      7.如果在where子句中使用参数,也会导致全表扫描。

    select id from table where num = @num 
    可以改为强制查询使用索引
    select id from table with(index(索引名)) where num = @num

      8.尽量避免在where子句中对字段进行表达式操作,否则会导致全表扫描。

    select id from table where num/2 = 100
    应改为
    select id from table where num = 100 *2

      9.尽量避免在where子句中对字段进行函数操作,否则将导致全表扫描。

    select id from table where substring(name,1,3) = 'abc'
    应改为
    select id from table where name like 'abc%'

      10.并不是所有索引对查询都有效,sql根据表中数据来进行查询优化,当索引有大量数据重复时,sql查询可能不会去利用索引。

      11.索引并不是越多越好,索引提高了select效率,但是降低了insert和update的效率。一个表的索引数最好不要超过6个。

      12.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,否则会降低查询和连接的性能,并会增加存储开销。因为引擎在处理查询和连接时会逐个比较字符串中每个字符,而对于数字型来说只需要比较一次就够了。

      13.尽可能使用varchar/nvarchar代替char/nchar,因为首先变长字段存储空间小,可以节省存储空间。其次对于查询来说,在一个相对较小得字段内搜索效率显然会高些。

      14.任何地方都不要使用select *,用具体的字段列表代替*,不要返回用不到的字段。

      15.尽量避免使用游标,因为游标得效率较差,如果游标操作的数据超过1万条,那么就要考虑改写。

      16.尽量避免大事务操作,提高系统并发能力。

      17.利用set rowcount实现高性能的分页的。

  • 相关阅读:
    Python_命名空间和作用域_25
    Python_函数_复习_习题_24
    Python_每日习题_0001_数字组合
    Python_试题_23
    Python_初识函数和返回值_22
    linux-shell-引用-命令替换-命令退出状态-逻辑操作符
    linux-shell-变量参数
    Python-复习-文件操作-21
    Python-注册登陆-20
    linux-vim
  • 原文地址:https://www.cnblogs.com/shadoll/p/14647091.html
Copyright © 2011-2022 走看看