博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql优化
阅读量:5318 次
发布时间:2019-06-14

本文共 1129 字,大约阅读时间需要 3 分钟。

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语句的非索引项或者有计算表达式都将降低查询速度;

     

转载于:https://www.cnblogs.com/cb0327/p/6141198.html

你可能感兴趣的文章
C++ 简单字符串加解密(转载)
查看>>
wireshark
查看>>
攻防工具
查看>>
20. 有效的括号
查看>>
公司级平台-IProgram-DAL
查看>>
【编程工具】Sublime Text3 之 Emmet 插件的详细使用的方法
查看>>
TortoiseGit
查看>>
mysql 递归查询父节点 和子节点
查看>>
简单的自我介绍
查看>>
Pamulinawen--IPA--菲律宾伊洛卡诺语
查看>>
第二十六章 计算限制的异步操作
查看>>
大处着眼,小处着手
查看>>
课后作业 (反转链表)
查看>>
PUSH到git分支代码不自动更新的问题
查看>>
leetcode 16:最接近的三数之和
查看>>
[Lintcode] Partition List
查看>>
QGIS练手 - 标注
查看>>
安装指定版本的minikube
查看>>
Linux_C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区...
查看>>
Django展示第一个网页
查看>>