SQL优化
创建索引可以大大提高系统的性能。
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?因为,增加索引也有许多不利的方面。
第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度
索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引:在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

数据库和表的字符集统一使用 UTF8
禁止在数据库中存储图片,文件等大的二进制数据
通常文件很大,会短时间内造成数据量快速增长,数据库进行数据库读取时,通常会进行大量的随机 IO 操作,文件很大时,IO 操作很耗时。
通常存储于文件服务器,数据库只存储文件地址信息

数据库字段设计规范
1、优先选择符合存储需要的最小的数据类型,比如对于非负型的数据 (如自增 ID,整型 IP) 来说,要优先使用无符号整型来存储
2、尽可能把所有列定义为 NOT NULL
索引 NULL 列需要额外的空间来保存,所以要占用更多的空间
进行比较和计算时要对 NULL 值做特别的处理
数据库 SQL 开发规范
充分利用表上已经存在的索引
避免使用双%号的查询条件。如:a like ‘%123%’,(如果无前置%,只有后置%,是可以用到列上的索引的)
在定义联合索引时,如果 a 列要用到范围查找的话,就要把 a 列放到联合索引的右侧,使用 left join 或 not exists 来优化 not in 操作,因为 not in 也通常会使用索引失效禁止使用 SELECT * 必须使用 SELECT <字段列表> 查询
在where子句中使用 IS NULL 或 IS NOT NULL 判断,索引将被放弃使用,会进行全表查询。

WHERE 从句中禁止对列进行函数转换和计算
减少同数据库的交互次数
避免使用子查询,可以把子查询优化为 join 操作
通常子查询在 in 子句中,且子查询中为简单 SQL(不包含 union、group by、order by、limit 从句) 时,才可以把子查询转化为关联查询进行优化。
子查询性能差的原因:
子查询的结果集无法使用索引,通常子查询的结果集会被存储到临时表中,不论是内存临时表还是磁盘临时表都不会存在索引,所以查询性能会受到一定的影响。特别是对于返回结果集比较大的子查询,其对查询性能的影响也就越大。
由于子查询会产生大量的临时表也没有索引,所以会消耗过多的 CPU 和 IO 资源,产生大量的慢查询。
拆分复杂的大 SQL 为多个小 SQL
大 SQL 逻辑上比较复杂,需要占用大量 CPU 进行计算的 SQL
MySQL 中,一个 SQL 只能使用一个 CPU 进行计算
SQL 拆分后可以通过并行执行来提高处理效率

慢查询
1、查询当前慢查询日志的状态
show variables like “%slow_query_log%”;
set global slow_query_log=on;
2、修改mysql配置文件保证永久生效
由于慢查询日志记录的信息比较多,会影响mysql的性能,所以生产环境不建议长期开启
vim /etc/my.cnf
slow_query_log=1
slow_query_log_file=/usr/local/mysql/data/slow-query.log
3、# 其他可用的配置参数
long_query_time=1# 慢查询日志的时间定义(秒),默认为10秒,多久就算慢查询的日志
log_queries_not_using_indexes=1 # 将所有没有使用带索引的查询语句全部写到慢查询日志中
有兴趣的可以访问歪枣网,学习交流,网站:www.waizaowang.com

歪枣网Mysql优化总结相关推荐

  1. 歪枣网数据库设计-千万级别海量数据查询效率优化

    由于歪枣网上的金融数据查询接口,主要是股票.基金的历史数据,数据量其实是非常大的,有兴趣的可以去逛逛网站.一只股票的 历史日/周/月K线数据将近三万条(包括前复权.不复权.后复权),将近上亿条数据.S ...

  2. 歪枣网股票数据下载接口汇总一

    下载接口动态信息如下: 沪深京股票 接口名称:A股列表,接口描述:沪深京A股基本信息,接口地址:/doc/getStockHSABaseInfo?code=all&fields=code,na ...

  3. 慕课网——MySQL优化

    一.https://blog.csdn.net/u014465934/article/details/80576673 二.https://blog.csdn.net/u014465934/artic ...

  4. MySQL优化学习总结

    MySQL 性能优化的最佳20多条经验分享 http://www.jb51.net/article/24392.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关 ...

  5. 「mysql优化专题」高可用性、负载均衡的mysql集群解决方案(12)

    不可避免的是,使用MySQL时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么MySQL的性能将会大大降低.怎么办?前面已经讲过十一篇优化方案,接下来 ...

  6. 淘宝商品库MySQL优化实践的学习

    淘宝商品库MySQL优化实践的学习 淘宝商品库是淘宝网最核心的数据库之一,采用MySQL主备集群的架构,特点是数据量大且增长速度快,读多写少,对安全性要求高,并发请求高.由于MySQL最初的设计不是用 ...

  7. Mysql优化(三):优化order by

    MySQL中的两种排序方式 .通过有序索引顺序扫描直接返回有序数据 因为索引的结构是B+树,索引中的数据是按照一定顺序进行排列的,所以在排序查询中如果能利用索引,就能避免额外的排序操作.EXPLAIN ...

  8. MySQL 优化 —— EXPLAIN 执行计划详解

    引言 本博客大部分内容翻译自MySQL 官网 Understanding the Query Execution Plan 专题.另外有一些补充,则来自于网课以及<高性能MySQL(第三版)&g ...

  9. MySQL 优化 —— WHERE 子句优化

    引言 本文翻译自 MySQL 官网:WHERE Clause Optimization WHERE 子句优化 这一部分我们来讨论对 WHERE 子句的优化处理.本部分的案例都是以 SELECT 语句为 ...

最新文章

  1. win7关闭系统索引服务器,win7系统关闭磁盘索引功能的操作方法
  2. 分享Kali Linux 2017年第二周镜像文件
  3. find the most comfortable road
  4. 【DP】Table(CF232B)
  5. SpringBoot + MyBatis(注解版),常用的SQL方法
  6. 取文件 shell_webshell文件上传分析溯源
  7. UVA 11452 Dancing the Cheeky-Cheeky
  8. hashmap是单向链表吗_HashMap源码大剖析
  9. [Postman使用]请求与响应
  10. 【bzoj3514】Codechef MARCH14 GERALD07加强版
  11. java 基础学习——基本技巧(一)
  12. 基于JAVA的超市库存管理系统
  13. 一款好用的三维贴图纹理制作软件:Substance Designer Mac 内附安装教程
  14. 2021年中青杯 B题 港珠澳车辆通行(详细解题思路)
  15. Win10内存占用过高但是实际没有多少进程
  16. 华为鸿蒙系统适配芯片,华为新平板参数曝光,高通骁龙870芯片加持,首发适配鸿蒙系统...
  17. checkv的基本使用
  18. Java的8大基本数据类型
  19. 学习笔记5--高精地图技术
  20. spring cloud、gradle、父子项目、微服务框架搭建---搭建Eureka注册中心(一)

热门文章

  1. 51单片机之特殊功能寄存器SFR
  2. 6-2-2:STL之string——string的模拟实现
  3. Qt之设置QWidget背景色
  4. 虚拟机CentOS7开机报错:you might must to save “/run/initramfs/rdsosreport.txt“ to a USB stick or /boot
  5. fatal: Path ‘XXX‘ is in submodule ‘XXX‘错误(path is in submodule)
  6. TCP协议端口状态说明:CLOSE-WAIT、TIME_WAIT 、LISTENING、SYN_SENT、ESTABLISHED、LAST_ACK、CLOSED
  7. 初识联邦学习(Federated learning)
  8. matlab——使用gird函数画背景格
  9. 排序算法:希尔排序算法实现及分析
  10. 汇编语言:实现大小写字母转换