想要成为一个高薪Web前端工程师,除了需要了解前端三要素以及常用的框架外,数据库知识同样不可忽视。目前市场上比较流行的数据库有MySQL、Oracle、Redis,今天千锋郑州老师就给大家分享一些常用的MySQL优化技巧。

MySQL优化主要分为四个方面:1)设计:存储引擎、字段类型、范式与逆范式;2)功能:索引、缓存、分区分表;3)架构:主从复制、读写分离、负载均衡;4)合理的SQL:测试、经验。项目中常用的MySQL优化方法有以下几种:

1、善用EXPLAIN查看SQL执行计划

EXPLAIN中,我们需要重点关注五个数据:

1)type列,连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。

2)key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式。

3)key_len列,索引长度。

4)rows列,扫描行数。该值是个预估值。

5)extra列,详细说明。注意,常见的不太友好的值,如下:Using filesort,Using temporary。

  2、SELECT语句务必指明字段名称

SELECT*增加很多不必要的消耗(CPU、IO、内存、网络带宽),增加了使用覆盖索引的可能性,当表结构发生改变时,前断也需要更新,所以要求直接在SELECT后面接上字段名。

  3、SQL语句中in包含的值不应过多

MySQL对于in做了相应的优化,即将in中的常量全部存储在一个数组里面,而且这个数组是排好序的,但是如果数值较多,产生的消耗也是比较大的。因此,对于连续的数值,能用between就不要用in,再或者使用连接来替换。

4、尽量用union all代替union

union和union all的差异主要是前者需要将结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的CPU运算,加大资源消耗及延迟。当然,union all的前提条件是两个结果集没有重复数据。

  5、如果限制条件中其他字段没有索引,尽量少用or

or两边的字段中,如果有一个不是索引字段,而其他条件也不是索引字段,会造成该查询不走索引的情况。很多时候使用union all或者是union(必要的时候)的方式来代替“or”会得到更好的效果。

  6、区分in和exists、not in和not exists

区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是in,那么先执行子查询。所以in适合于外表大而内表小的情况;exists适合于外表小而内表大的情况。关于not in和not exists,推荐使用not exists,不仅仅是效率问题,not in可能存在逻辑问题。

7、使用合理的分页方式以提高分页的效率

随着表数据量的增加,直接使用limit分页查询会越来越慢。优化的方法是:可以取前一页的最大行数的id,然后根据这个最大的id来限制下一页的起点。

8、不建议使用%前缀模糊查询

例如LIKE“%name”或者LIKE“%name%”,这种查询会导致索引失效而进行全表扫描。但是可以使用LIKE “name%”。

9、对于联合索引来说,要遵守最左前缀法则

举列来说索引含有字段id、name、school,可以直接用id字段,也可以id、name这样的顺序,但是name;school都无法使用这个索引。所以在创建联合索引的时候一定要注意索引字段顺序,常用的查询字段放在最前面。

以上就是常用的MySQL优化技巧,当然还有其他的方式比如合理利用索引、利用小表去驱动大表等等。如果你想了解更多,可以关注“千锋郑州校区”微信公众号,更多Web前端学习教程资料等你领取,心动就赶快行动!

mysql like in 数组_Web前端学习教程之常用的MySQL优化技巧相关推荐

  1. 系列笔记 | 深度学习连载(5):优化技巧(下)

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 深度学习中我们总结出 5 大技巧: 本节继续从第三个开始讲起. 3. Early stoppi ...

  2. 前端图片有时候能显示有时候不显示_web前端基础教程:两种数据存储思路

    Web前端开发基础,Web前端基础教程 数据存储是数据流在加工过程中产生的临时文件或加工过程中需要查找的信息.数据以某种格式记录在计算机内部或外部存储介质上.数据存储要命名,这种命名要反映信息特征的组 ...

  3. c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...

  4. web后端语言_web前端学习路线图_快速入门web前端学习路线图

    如何学好Web前端开发技术?前端学习路线是什么?如今,移动开发的发展依旧如火如荼,企业对于Web前端人才需求产生了巨大的缺口,从事Web前端开发的程序员们则是其中较大的获益者.Web前端的广泛运用,造 ...

  5. web前端学习(五):MySQL小型数据库,最常用而又轻便

    1.数据库备份与恢复 1.建立表的外键 如果出现错误,需要考虑以下三个方面的原因: 外键连接的两个字段长度,类型是否相同.(是否为Null值不影响) 单独的表是否缺少某项依赖或者主键. 表的外键名称不 ...

  6. css清除浮动的几种方法_web前端学习路线分享CSS浮动-清除浮动篇

    web前端学习路线分享CSS浮动-清除浮动篇,为什么要清除浮动 这里所说的清除浮动,并不是不要浮动了,而是清除浮动与浮动之间的影响.那么到底会有什么影响呢? 1.高度塌陷 举个例子我们看一下. 我们在 ...

  7. 前端如何实现音乐盒胶盘的转动_郑州Web前端入门教程之如何实现图片优化?

    统计数据显示,图片内容已经占据互联网内容总量的62%,因此想要优化网站性能,图片绝对是优化的热点和重点.图片优化是Web前端工程师必须要掌握的知识点,在接下来的郑州Web前端入门教程就给大家讲解一下如 ...

  8. java用数组输出fibo_[Java教程]养兔子Fibo函数优化

    [Java教程]养兔子Fibo函数优化 0 2017-02-24 00:00:16 Title 本文网址:http://www.shaoqun.com/a/302303.html *特别声明:以上内容 ...

  9. 前端面试技巧和注意事项_web前端没有项目经验怎么应对面试?(技巧) -

    thinkphp开发的一个项目,登录成功后又跳转到登录页面,在提交信息后输出session都是正常的,没有问题,但是页面跳转后,session出现丢失现象,无法正常完成登陆.通过查找资料,发现原来是b ...

最新文章

  1. 服务器架设笔记——打通MySQL和Apache
  2. 1093 Count PAT‘s
  3. webuploader 怎么在react中_React 项目性能分析及优化
  4. 采样次数不同平均值不一样_网络推广采取的方式不同,效果也不一样
  5. 32和64位jvm_我应该使用32位还是64位JVM?
  6. android旋转动画的两种实现方式
  7. SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法(2)
  8. mysql 直方图_MySQL直方图
  9. 【转】给网站添加X-UA-Compatible标签
  10. JavaEE学习--javascript中的正则表达式
  11. Struts2学习笔记(4)-ActionSupport类及Action接口详解
  12. cmd 文本文件分割_通过split命令分割大文件
  13. 有些软件,听着听着就没了...
  14. Flink流计算编程--watermark(水位线)简介
  15. Ubuntu20.04英文系统无法安装中文智能拼音输入法
  16. 问卷星 php,问卷星API介绍
  17. day13-搜索过滤
  18. matlab的fft与ifft,fft与ifft区别
  19. lwip【4】 lwIP配置文件opt.h和lwipopts.h初步分析之一
  20. 最新小月云匿名短信系统源码V2.0+全新UI的

热门文章

  1. 【Spring】Spring Boot 支持 Https
  2. Spark.2.2源码阅读: SPARK SUBMIT任务提交
  3. 95-120-046-源码-Cluster-YarnSessionClusterEntrypoint
  4. 95-235-040-源码-task-Flink 对用户代码异常处理
  5. Druid : 慢SQL统计与监控
  6. spark学习-28-Spark数据倾斜问题
  7. 服务的心跳机制与断线重连,Netty底层是怎么实现的?
  8. 手把手教你实现 Docker 部署 Redis 集群
  9. Java多线程学习九:怎样确定线程数量及CPU 核心数和线程数的关系||如何定制自己的线程池
  10. 在带有OR条件的LEFT JOIN中使用索引(Using index in LEFT JOIN with OR condition)