zoukankan      html  css  js  c++  java
  • mysql优化

    mysql知识库

    1、索引优化

    1. 过渡索引问题

      对于查询为主的应用来说,索引显得尤为重要,如果没有索引,那么查找任何哪怕一条特定的数据都会进行一次全表扫描,表数据量大,则性能下降明显;但不是什么情况都飞得建索引不可,如“性别”这种只有两个值的字段没必要建索引,建索引不仅没有什么优势,还回影响更新速度,这种称为过度索引;
    2. is null 与is not null问题

      只要列中包含有null值都将不会包含在索引中,则该列索引失效;联合索引中只要有一列含有null值,那么该列对于联合索引就是无效的,因此在数据库设计时不要让字段默认值为null;
    3. 联合索引

      由于mysql查询及排序每次只能使用一个索引,所以表中常用作限制条件的多个字段,可以考虑建立联合索引,如(area,age,salary)联合索引,其实相当于(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性!因此,创建联合索引时,将常用作限制条件的列放在靠左边,依次递减;
    4. like索引问题

      1. select * from employee where last_name like '%cliton%’;——通配符在这个位置的查询,系统优化 器不使用last_name的索引;
      2. select * from employee where last_name like 'c%’;——然而,通配符这个位置查询,优化器就能利 用索引;
    5. not及<>索引问题

      not及<>可用来对任何逻辑运算符号取反,not包含在<>运算符中,并且都不会使用索引而进行全表扫描;not in可用not exists代替,id<>3可用id>3 or id<3代替;
    6. 列上函数运算索引问题

      不要在列上进行函数运算,这样将在每行进行运算,导致索引失效而进行全表扫描;
      如:select * from users where YEAR(adddate)<2007;
      改为:select * from users where adddate<2007-01-01’;
    7. 链接列索引问题

      系统优化器对于链接的列索引没有使用,如下sql,基于last_name创建的索引失效!如:
      select * from employss where first_name||''||last_name ='Beill Cliton’;
    8. order by语句

      Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列(如链接或者附加等)!任何Order by语句的非索引项或者有计算表达式都将降低查询速度;
  • 相关阅读:
    .net 使用 swagger 操作
    oracle 基础
    关于webapi跨域问题的一些坑坑
    sqlHelper
    微博数据接入开发
    mvc后台上传
    sql server 报错处理
    asp.net 微信开发(二)
    收集一些关于OI/ACM的奇怪的东西……
    LeetCode 229 Majority Element II
  • 原文地址:https://www.cnblogs.com/cb0327/p/6141198.html
Copyright © 2011-2022 走看看