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实现高性能的分页的。

  • 相关阅读:
    PHP 5.5.0 Alpha5 发布
    Ubuntu Touch 只是另一个 Android 皮肤?
    MariaDB 10 已经为动态列提供文档说明
    Percona Toolkit 2.1.9 发布,MySQL 管理工具
    Oracle Linux 6.4 发布
    Ruby 2.0.0 首个稳定版本(p0)发布
    Apache Pig 0.11.0 发布,大规模数据分析
    Node.js 0.8.21 稳定版发布
    红薯 MySQL 5.5 和 5.6 默认参数值的差异
    Django 1.5 正式版发布,支持 Python 3
  • 原文地址:https://www.cnblogs.com/shadoll/p/14647091.html
Copyright © 2011-2022 走看看