性能优化

优化MySQL数据库是数据库管理员和数据库开发人员的必备技能。MySQL优化,一方面是找出系统的瓶颈,提高MySQL数据库的整体性能;一方面需要合理的结构设计和参数调整,以提高用户操作响应的速度;同时应该尽可能节省系统资源,以便系统可以提供更大负荷的服务。

MySQL数据库优化是多方面的,有几条优化原则:

1、减少系统的瓶颈

2、减少资源的占用

3、增加系统的反应速度

优化查询

1、索引对查询的影响

我有一个book表,里面有10条记录,没有索引查询的时候:

使用了索引:

看到不使用索引的时候rows为10,也就是说扫描了表中的10条记录,而使用索引,rows为1,说明扫描了表中的1条记录,其查询速度自然比不使用索引快。而且possible_keys和key的值都是BkNameIdx,说明查询时使用了BkNameIdx索引

2、使用索引查询

使用索引查询有几种特殊情况,特别提一下:

(1)使用LIKE关键字的查询语句

在使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为"%",索引不会起作用,只有"%"不在第一个位置,索引才会起作用

(2)使用多列索引的查询语句

MySQL可以为多个字段创建索引,一个索引可以包含16个字段,对于多列索引,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用

(3)使用OR关键字的查询语句

查询语句的查询条件中只有OR关键字,且OR前后两个条件都是索引时,查询才会使用索引,否则,查询将不使用索引

3、避免使用SELECT *命令

从表中读取的数据越多,查询会变得越慢,始终指定需要的列,是一个良好的习惯

4、永远为每张表设置一个ID

我们应该为数据库里的每张表都设置一个ID作为其主键,而且最好是一个INT型的,并设置上自动增加的AUTO_INCREMENT标识。就算有些VARCHAR字段类型的值,它永远不会重复,也不要设置为主键,使用VARCHAR类型来当主键会使性能下降

数据库结构优化

一个好的数据库设计方案对于数据库的性能常常会起到事半功倍的效果,合理的数据库结构不仅可以使数据库占用更小的磁盘空间,而且能够使查询速度更快。数据库结构的设计,需要考虑数据冗余、查询和更新的速度、字段的数据类型是否合理等多方面内容。

下面提供几条优化数据库结构的建议:

1、将字段很多的表分解为多个表

对于字段很多的表,如果有些字段的使用频率很低,可以将这些字段分离出来形成新表。因为当一个表的数据量很大时,会由于使用频率低的字段的存在而变慢,通过分解字段,可以提高表的查询效率

2、增加中间表

对于需要经常联合查询的表,可以建立中间表以提高查询效率。通过建立中间表,把需要经常联合查询的数据插入到中间表,然后将原来的联合查询改为对中间表的查询,以此来提高查询效率

3、优化插入记录的速度

插入记录时,影响插入速度的主要是索引、唯一性校验、一次插入记录条数等,根据这些情况,可以分别进行优化(以使用InnoDB的表为例):

(1)禁用唯一性检查

插入数据时,MySQL会对插入的记录进行唯一性校验。这种唯一性校验也会降低插入记录的速度,为了降低这种情况对查询速度的影响,可以在插入记录之前禁用唯一性检查,等到记录插入完毕之后再开启:

SET UNIQUE_CHECKS = 0;

开启唯一性检查:

SET UNIQUE_CHECKS = 1;

(2)禁用外键检查

插入数据之前禁止对外键的检查,数据插入之后再恢复对外键的检查,禁用外键检查的语句如下:

SET foreign_key_checks = 0;

恢复对外键检查的语句为:

SET foreign_key_checks = 1;

(3)禁止自动提交

插入数据之前禁止事物的自动提交,数据导入完成之后,执行恢复自动提交操作。禁止自动提交的语句如下:

SET autocommit = 0;

恢复自动提交的语句为:

SET autocommit = 1;

MySQL7:性能优化的更多相关文章

  1. 01.SQLServer性能优化之----强大的文件组----分盘存储

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...

  2. 03.SQLServer性能优化之---存储优化系列

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概  述:http://www.cnblogs.com/dunitian/p/60413 ...

  3. Web性能优化:What? Why? How?

    为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...

  4. Web性能优化:图片优化

    程序员都是懒孩子,想直接看自动优化的点:传送门 我自己的Blog:http://cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到 ...

  5. C#中那些[举手之劳]的性能优化

    隔了很久没写东西了,主要是最近比较忙,更主要的是最近比较懒...... 其实这篇很早就想写了 工作和生活中经常可以看到一些程序猿,写代码的时候只关注代码的逻辑性,而不考虑运行效率 其实这对大多数程序猿 ...

  6. JavaScript性能优化

    如今主流浏览器都在比拼JavaScript引擎的执行速度,但最终都会达到一个理论极限,即无限接近编译后程序执行速度. 这种情况下决定程序速度的另一个重要因素就是代码本身. 在这里我们会分门别类的介绍J ...

  7. 02.SQLServer性能优化之---牛逼的OSQL----大数据导入

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 上一篇:01.SQLServer性能优化之----强大的文件组----分盘存储 http ...

  8. C++ 应用程序性能优化

    C++ 应用程序性能优化 eryar@163.com 1. Introduction 对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方 ...

  9. Android性能优化之利用LeakCanary检测内存泄漏及解决办法

    前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来. ...

随机推荐

  1. 第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()

    最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final Reentrant ...

  2. 如使用Typescript撸Vue(Vue2 + TS +TSX+CSS module)

    Vue对TS的支持一致不太好,连Vue作者尤大也自嘲真香压错了宝.期待Vue3.0会用TS重构且会有较大改进.不过目前有一些第三方的库可以曲线优化对TS的支持.主要就介绍下过下面两个库来写Vue. 总 ...

  3. S11 day 97 -98天 Luffycity项目

    1. 建模 from django.db import models from django.contrib.contenttypes.fields import GenericForeignKey, ...

  4. Python 第三方包上传至 PyPI 服务器

    PyPI 服务器主要功能是?PyPI 服务器怎么搭建? PyPI 服务器可以用来管理自己开发的 Python 第三包. Pypi服务器搭建 Python 第三方包在本地打包 # 本地目录执行以下命令应 ...

  5. centos6.2 下安装并配置hadoop1.0.4(32位安装)

      一,环境准备 1.  集群内所有电脑需要设置防火墙,下面以master为例说明: 切换到root用户下,执行setup指令:

  6. [SqlServer] Error: 15023

    Use DataBaseName go sp_change_users_login 'update_one', 'UserName', 'UserName' 恢复数据库后,添加用户,报错号15023 ...

  7. 【learning】微信跳一跳辅助c++详解 轻松上万 【上】

    写在前面 17年年底Wechat出了这个跳一跳的小游戏,今年2月份的时候简单地玩了一下,发现被游戏虐了(手太残了只能跳20多).     今天刚好有点空,于是就花了一个下午的时间写了一个跳一跳的c++ ...

  8. 【poj1850】 Code 数位dp+记忆化搜索

    题目大意:给你一个字符串,问你这个字符串的rank,如果这个字符串不合法,请直接输出0.(一个合法的字符串是对于∀i,有c[i]<c[i+1]) 字符串s的rank的计算方式:以字符串长度作为第 ...

  9. (转)PLSQL Developer 12.0.7连接Oracle12c数据库

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sl1992/article/details/80489413 1.下载安装PL/SQL Develo ...

  10. android IPC 机制 (开发艺术探索)

    一.IPC 机制介绍 IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程.那么什么是进程,什么是线程,进程和线程 ...