Mysql:性能优化
性能优化
优化MySQL数据库是数据库管理员和数据库开发人员的必备技能。MySQL优化,一方面是找出系统的瓶颈,提高MySQL数据库的整体性能;一方面需要合理的结构设计和参数调整,以提高用户操作响应的速度;同时应该尽可能节省系统资源,以便系统可以提供更大负荷的服务。
MySQL数据库优化是多方面的,有几条优化原则:
1、减少系统的瓶颈
2、减少资源的占用
3、增加系统的反应速度
优化查询
1、使用索引查询
使用索引查询有几种特殊情况,特别提一下:
(1)使用LIKE关键字的查询语句
在使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为"%",索引不会起作用,只有"%"不在第一个位置,索引才会起作用
(2)使用多列索引的查询语句
MySQL可以为多个字段创建索引,一个索引可以包含16个字段,对于多列索引,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用
(3)使用OR关键字的查询语句
查询语句的查询条件中只有OR关键字,且OR前后两个条件都是索引时,查询才会使用索引,否则,查询将不使用索引
2、避免使用SELECT *命令
从表中读取的数据越多,查询会变得越慢,始终指定需要的列,是一个良好的习惯
3、永远为每张表设置一个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;
Mysql使用索引可能失效的场景
1.WHERE字句的查询条件里有不等于号(where column !=…),MYSQL将无法使用索引
select * from userinfo u where u.userName != 'admin1'

select * from userinfo u where u.userName = 'admin1'

Mysql:性能优化的更多相关文章
- Mysql - 性能优化之子查询
记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...
- Mysql性能优化三(分表、增量备份、还原)
接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...
- [MySQL性能优化系列]提高缓存命中率
1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...
- [MySQL性能优化系列]巧用索引
1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...
- MySQL性能优化:索引
MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...
- mysql 性能优化方向
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- MySQL性能优化总结
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
- MYSQL性能优化的最佳20+条经验
MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论 131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...
- [MySQL性能优化系列]LIMIT语句优化
1. 背景 假设有如下SQL语句: SELECT * FROM table1 LIMIT offset, rows 这是一条典型的LIMIT语句,常见的使用场景是,某些查询返回的内容特别多,而客户端处 ...
- mysql 性能优化方案
网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
随机推荐
- robotframework用例标签的使用
*** Settings ***Force Tags req-42Default Tags owner-john smoke *** Variables ***${HOST} 10.0.1.42 ** ...
- 【BZOJ3816】【清华集训2014】矩阵变换 稳定婚姻问题
题目描述 给出一个\(n\)行\(m\)列的矩阵\(A\), 保证满足以下性质: 1.\(m>n\). 2.矩阵中每个数都是\([0,n]\)中的自然数. 3.每行中,\([1,n]\)中每个自 ...
- pax3 quick start guide
pax3 quick start guide 外观图: 配置:1 * pax3 主机:2 * 吸嘴(一个平的,一个凸的):2 * 底盖(一个烟草的,一个烟膏的):3 * 过滤片:1 * USB充:1 ...
- jqGrid 中文配置 - grid.locale-cn.js 多国语言
中文配置如下:多国语言(demo 内有官方下载连接 ): jqGrid 表格插件中文 grid.locale-cn.js 代码如下: ;(function ($) { /** * jqGrid Eng ...
- 【支付宝】"验签出错,sign值与sign_type参数指定的签名类型不一致:sign_type参数值为RSA,您实际用的签名类型可能是RSA2"
问题定位:从描述就可以看的出来了,你现在sign_type是 RSA类型的,要改成跟你现在用的签名类型一致的类型,也就是 要改为 RSA2 PHP为例 // 新版只支持此种签名方式 商户生成签名字符 ...
- 缺省源和 Vim 配置
缺省源 #include <bits/stdc++.h> #define x first #define y second #define pb push_back #define mp ...
- 聊聊openjdk的BufferPoolMXBean
本文主要研究一下openjdk的BufferPoolMXBean PlatformManagedObjectjava.management/java/lang/management/PlatformM ...
- 「SCOI2015」小凸玩密室 解题报告
「SCOI2015」小凸玩密室 虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了.. 不过这个题本身也挺厉害的 注意第一个被点亮的是任意选的,我最开始压根没注意到 \(dp_{i,j}\)代表 ...
- centos7破解安装fisheye和Crucible
背景介绍: Atlassian的东西相信大家都不陌生,JIRA.Confluence……虽然说这些产品都要收费,也可以申请试用: FishEye 可以方便地查看代码,而Crucible 则是进行Cod ...
- BZOJ3932: [CQOI2015]任务查询系统 主席树
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4869 Solved: 1652[Submit][St ...