当前位置: 首页 > 编程日记 > 正文

mysql数据库优化命令_MySQL数据库优化总结

一个:MySQL标准数据库优化注意事项

1.数据库设计(表设计合理)三范式(规范的模式)

三范式包含:

第一范式:1NF是对属性的原子性的约束。要求属性具有原子性,不可再分解。(仅仅要是关系型数据库都满足)

第二范式:2NF是记录的唯一性约束,要求记录有唯一标识。即实体的唯一性。(设立主键)

第三范式:3NF是对字段冗余性约束,即不论什么字段不能由其它字段派生出来。要求字段没有冗余。

(通过表外键)

逆范式(适当的冗余):提高查询效率。

PS:冗余应当放在记录尽量少的表上。避免造成空间浪费。.

2.sql语句优化

3.数据库參数的配置(缓存大小)

4.恰当的硬件资源和操作系统

二:sql语句优化步骤

1.通过show status命令了解各种sql的运行效率

show status命令能够显示你的MySQL数据库的当前状态。

关心"Com_"打头的数据语句。

显示当前控制台的MySQL情况:

show status like "Com%" ;  <=>  show session status like "Com%";

显示数据库从启动到此时的情况:

show global status like "Com%";

显示连接数据库的次数:

show status like "Connections";

显示server工作了的时间:

show status like "Uptime";

显示慢查询的次数(默认是10s):

show status like "slow_queries";

显示慢查询时间:

show variables like "long_query_time"

设置慢查询时间(2s):

set long_query_time=2;

2.定位到运行效率较低的sql语句

MySQL数据库支持将慢查询语句记录到日志中,供程序员分析(默认情况下不启动日志功能)。启动:进入到MySQL的安装文件夹bin下

mysqld.exe --slow-query-log.         //以日志功能方式启功MySQL

3.通过explain 分析低效率的sql语句的运行情况

explain一款很重要的工具。这个分析工具能够对sql语句进行分析能够预測sql的运行效率。

4.确定问题并提供对应的优化措施

三:sql语句的几种类型

ddl(数据库定义语言):create,alter,drop

dml(数据库操作语言):insert,delete,update

select

dtl(数据库事务语言):commit,rollback,savepoint

dcl(数据库控制语言):grant,revoke

四:数据库存储引擎MyISAM和InnoDB比較

1.MyISAM既不支持外键也不支持事务。InnoDB都支持。

2.假设存储引擎是MyISAM的,则当创建一个表后有三个文件:

*.frm(记录表结构),*.myd(记录数据),*.myI(记录索引)

InnoDB仅仅相应一个文件*.frm。数据存储在ibdata1文件里。

3.对于MyISAM存储引擎数据库要定时清理:

运行命令:optimize table 表名;

五:sql语句优化之加入索引

索引的原理:对于MyISAM存储引擎。索引是加入在.myI文件里。数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就能够在这些数据结构上实现高级查找算法。这样的数据结构。就是索引。再次查询速度将明显变快,可是牺牲了删除,改动,加入表数据的代价。

索引的类型:

1.主键索引。主键自己主动的为主索引(类型为Primary)主键自带索引

2.唯一索引(UNIQUE)。唯一性同一时候又是索引

3.普通索引(Index)

4.全文索引(FULLTEXT)。仅仅有MyISAM存储引擎支持

5.复合索引(多列和在一起)。create index 索引名  on 表名 (列1,列2);

创建索引:

1.create [UNIQUE / FULLTEXT] index  索引名 on 表名 (列名...);

2.alter table 表名 add index 索引名 (列名...);

3.假设加入主键索引:alter table 表名 add primary key(列名);

删除索引:

1.drop index 索引名 on 表名;

2.alter table 表名 drop index 索引名;

3.假设删除主键索引:alter table 表名 drop primary key;

查看某表的全部索引:

1.show indexes from 表名;

2.show keys from 表名;

3.desc 表名;

!!PS!

!!下列表查询将不使用索引:

1.假设查询条件中有or,即使当中有索引也不会使用(or指令要少用)。

2.对于使用多列索引的表,仅仅有最左边的列才干使用到索引,其余列则不会使用索引。

3.对于使用like查询。查询假设是"%aaa"不会使用到索引。"aaa%"则会使用到索引。

4.假设列类型是字符串,那一定要在条件中将数据使用引號引用起来。否则不会使用索引。

5.假设MySQL预计使用全表扫描要比使用索引快,则不使用索引。

查看索引的使用情况:

show status like "Handler_read%";

注意结果:Handler_read_key:这个值越高越好。越高表示使用索引查询到的次数。Handler_read_rnd_next:这个值越高,说明查询低效。

六:explain对sql语句的分析

比如:explain select * from emp where empno=2000\G;

Center

会产生下面信息:

select_type:表示查询的类型。

table:对哪张表查询。

type:表示表的连接类型。

possible_keys:表示查询时,可能使用的索引类型。

key:表示实际使用的索引类型。

key_len:索引的字段长度。

rows:扫描的行数。

Extra:运行情况的描写叙述和说明。

Type的三种类型:

1.ALL:完整的表扫描,通常不好。

eg:explain select * from emp\G;

2.system:表仅有一行,这是const连接类型的特例。

3.const:表最多有一个匹配行。

Extra分析:

Notables:不存在表。

Using filesort:当Query中包括ORDER BY操作,并且无法利用索引进行排序。

Using temporary:某些操作必须使用暂时表,常见GROUP BY,ORDER BY。

Using where:不用读取表中全部信息。仅通过索引就能获取所需信息。

七:常见sql优化

1.大批量插入数据:

对于MyISAM存储引擎:

alter table 表名 disable keys;  //避免建立大量索引

loading data;

alter table 表名 enable keys;

对于InnoDB存储引擎:

1.将要导入的数据依照主键排序

2.set unique_checks=0;  关闭唯一性校验

3.set autocommit=0;  关闭自己主动提交

2.优化group by语句

默认情况,MySQL对全部的group by列进行排序。这与在查询中指定order by列类似。

假设在查询中包含group by但用户想要避免查询结果的消耗,则能够使用order by null禁止排序

eg: select * from dept group by ename order by null;

3.假设在含有or的查询语句中利用索引。则or之间的每一个条件列都必须用到索引。假设没有索引,则应该考虑添加索引。

4.在精度要求高的应用中,建议使用定点数(decimal)来存储数值,不使用浮点数(float),以保证结果的准确性。

5.对于MyISAM的存储引擎的数据库,假设常常做删除和改动记录的操作,要定时运行optimize table 表名;对表进行碎片整理。

6.日期类型要依据实际须要选择最小存储的类型(timestamp:4个字节。datetime:8字节)。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

相关文章:

C++ 卸载程序

目的&#xff1a;用C写一个自己的卸载程序来完成程序的卸载工作&#xff0c;同时运行后要删除卸载程序本身&#xff0c;并删除卸载程序所在的文件夹。 注&#xff1a;在程序退出的时候写上 自己的卸载代码。 // FileName: Uninstall.h #pragma onceclass CUninstall { private:…

《火星救援VR》原班人马打造全新AR游戏,让可爱小飞龙伴随你左右

曾开发了《火星救援》的VR团队即将发布AR游戏《Follow Me Dragon》&#xff0c;让可爱小飞龙“融入”真实世界。 开发商The Virtual Reality Company曾经打造过风靡一时的《火星救援》VR游戏。今日&#xff0c;他们刚刚发布了一款名为《Follow me Dragon》的AR游戏。 目前&…

【组队学习】【30期】时间序列分析

时间序列分析 航路开辟者&#xff1a;李岳昆、易远哲领航员&#xff1a;王洲烽航海士&#xff1a;李岳昆、易远哲 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/team-learning-data-mining/tree/master/TimeSeries内容属性&#xff1a;打磨课程内容说明…

mysql二进制日志管理_MYSQL二进制日志管理脚本

MYSQL二进制日志管理脚本脚本原理是每小时对进行flush生成新的二进制日志&#xff0c;将二进制日志备份至NFS&#xff0c;并压缩存放&#xff1a;#!/bin/bash#Purpose:管理二进制日志&#xff0c;每小时刷新二进制日志&#xff0c;并将日志复制到nfs服务器上&#xff0c;方便以…

iPhone App开发实战手册学习笔记(5)之IOS常用机制

1 前言 在IOS开发中&#xff0c;相信大家一定听说过委托&#xff0c;数据源&#xff0c;target&#xff0c;action等等&#xff0c;今天我们就来简单的学习一下这些内容。 2 详述 2.1 委托和数据源 大家是否曾经有不知道如何去执行一项任务的时候&#xff1f;或许是修理一台洗碗…

Datawhale组队学习周报(第035周)

希望开设的开源内容 目前Datawhale的开源内容分为两种&#xff1a;第一种是已经囊括在我们的学习路线图内的Datawhale精品课&#xff0c;第二种是暂未囊括在我们的学习路线图内的Datawhale打磨课。我们根据您的投票来确定精品课程的排期&#xff0c;打磨课程一旦完成&#xff…

【Project Euler】530 GCD of Divisors 莫比乌斯反演

【题目】GCD of Divisors 【题意】给定f(n)Σd|n gcd(d,n/d)的前缀和F(n)&#xff0c;n10^15。 【算法】莫比乌斯反演 【题解】参考&#xff1a;任之洲数论函数.pdf 这个范围显然杜教筛也是做不了的&#xff0c;而且考虑直接化简f(n)也遇到了困难&#xff0c;所以考虑将前缀和的…

php mysql 星级评分_jQuery+PHP实现星级评分

本例实现的效果&#xff1a;过渡动画显示评分操作。及时更新平均得分和用户所评的分数。后台限制用户重复评分操作&#xff0c;并在前端及时显示。XHTMLHTML结构分为用于显示灰星星div#big_rate、亮星星div#big_rate_up、分数span#s及span#g和提示信息div#my_rate。CSS.rate{wi…

Xt800、DEFY自带号码归属地更新包,更新至2013.4【数据总数278360条】

总结了http://bbs.gfan.com/forum.php?modviewthread&tid5603346&extrapage%3D1&page1和http://bbs.mfunz.com/thread-706813-1-1.html&#xff0c;经测试在我的XT800上可用&#xff0c;可以把其他的第三方来电软件通通删掉了。 特点&#xff1a;能够显示运营商&a…

中国电子学会图形化四级编程题:程序优化

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

当代艺术遇上虚拟现实:幻境视界打造基业VR美术馆

VR展览也许并不少&#xff0c;但专业的艺术展却难得一见。幻境世界周志强希望能借助VR技术&#xff0c;实现“一地办展、全球同展、永不闭馆”&#xff0c;更好地传播当代艺术。 从米开朗琪罗到库尔贝&#xff0c;再到雷诺阿&#xff0c;大师们不断找到新的艺术语言来阐释人体…

python二叉搜索树建立_700. 二叉搜索树的搜索(Python)

题目难度&#xff1a;★☆☆☆☆类型&#xff1a;二叉树给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 NULL。例如&#xff0c;给定二叉搜索树:4/ \2 7/ \1 3和值: 2你应该返回…

CF484E Sign on Fence

题意 给定一个长度为n的数列&#xff0c;有m次询问&#xff0c;询问形如l r k 要你在区间[l,r]内选一个长度为k的区间&#xff0c;求区间最小数的最大值 Sol 二分答案 怎么判定&#xff0c;每种数字开一棵线段树 某个位置上的数大于等于它为1 那么就是求区间最大的1的序列长度大…

【组队学习】【30期】吃瓜教程——西瓜书+南瓜书

吃瓜教程——西瓜书南瓜书 航路开辟者&#xff1a;谢文睿、秦州领航员&#xff1a;邱振波航海士&#xff1a;谢文睿、秦州 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/pumpkin-bookB 站视频&#xff1a;https://www.bilibili.com/video/BV1Mh411e7VU内…

如何破解压缩文件密码-省时省力的方法

压缩文件破解工具下载地址&#xff1a;http://www.cnblogs.com/spring_wang/archive/2013/06/14/3135163.html 应该很多人都碰到过RAR加密、解密的问题吧。简单给大家介绍下如何用工具来破解RAR密码&#xff01;我们所利用的工具&#xff0c;就是“ARPR”、相信有些人肯定知道。…

学完javase和mysql_Java基础学完接下来应该学什么呢?

谢谢邀请&#xff01;Java基础部分涵盖了类、对象、属性和方法四大概念&#xff0c;以及封装、继承、多态的理解及使用。Java基础部分是Java学习过程中相对来说比较难的部分&#xff0c;Java语言属于开头难&#xff0c;之后越学越简单的语言。基础部分要清晰Java面向对象的开发…

Linux文件分割与合并:splitcat(转载)

转自&#xff1a;http://os.51cto.com/art/201104/255359.htm Linux下文件分割可以通过split命令来实现&#xff0c;而用cat进行文件合并。而分割可以指定按行数分割和安大小分割两种模式。Linux下文件合并可以通过cat命令来实现&#xff0c;非常简单。 在Linux下用split进行文…

【组队学习】【30期】李宏毅机器学习(含深度学习)

李宏毅机器学习&#xff08;含深度学习&#xff09; 航路开辟者&#xff1a;王茂霖、陈安东&#xff0c;刘峥嵘&#xff0c;李玲领航员&#xff1a;初晓宇航海士&#xff1a;王茂霖 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/leeml-notes开源内容&am…

mac下用Dosbox搭建dos下的汇编环境

安装Dosbox&#xff0c;下载地址 pan.baidu.com/s/1qZfgGc0 安装汇编编译器,下载masm pan.baidu.com/s/1c4k5fCc&#xff0c;在个人目录下新建 ~/Dosbox目录&#xff0c;把masm拷贝到Dosbox目录中 设置Dosbox autoexec, 编辑&#xff5e;/Library/Preferences/DOSBox\ 0.74\ …

java线程安全的set_Java并发编程之set集合的线程安全类你知道吗

Java并发编程之-set集合的线程安全类Java中set集合怎么保证线程安全&#xff0c;这种方式你知道吗&#xff1f;在Java中set集合是本篇是《凯哥(凯哥并发编程学习》系列之《并发集合系列》教程的第二篇&#xff1a;本文主要内容&#xff1a;Set集合子类底层分别是什么&#xff1…

亮剑.NET的系列文章之.NET实现三层架构(三)

最近一直在学习三层架构&#xff0c;前些天同样也写了一篇同样的博客&#xff0c;今天主要是通过一个登录的实例给大家讲解每部分的作用和相应代码的实现。先将实现三层架构的UML图给大家&#xff0c;帮助大家更好的理解三层。&#xff11;. UI作用 (1) 向用户展示特定业务数据…

【组队学习】【30期】6. 树模型与集成学习

树模型与集成学习 航路开辟者&#xff1a;耿远昊领航员&#xff1a;姜萌航海士&#xff1a;耿远昊 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/machine-learning-toy-code内容属性&#xff1a;打磨课程内容说明&#xff1a;本课程将对机器学习中的集成…

mysql整理碎片和显示语句错误

2019独角兽企业重金招聘Python工程师标准>>> &#xff11;、myisam存储引擎清理碎片方法 OPTIMIZE TABLE table_name &#xff12;、innodb存储引擎清理碎片方法 ALTER TABLE tablename ENGINEInnoDB &#xff13;、查看表碎片的方法 select ROW_FORMAT,TABLE_ROWS…

java 查询 代码_java使用es查询的示例代码

众所周知&#xff0c;elasticsearch简称es,它是基于基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业级搜索…

【转】解密“设计模式”

有些人问我&#xff0c;你说学习操作系统的最好办法是学习程序设计。那我们是不是应该学习一些“设计模式”&#xff08;design patterns&#xff09;。这是一个我很早就有定论&#xff0c;而且经过实践检验的问题&#xff0c;所以想在这里做一个总结。 总的来说&#xff0c;如…

Qt Installer Framework实战

Qt Installer Framework是Qt发布的安装程序支持框架&#xff0c;只需要简单的配置就可以生成安装文件&#xff0c;同时可以通过javascript脚本来定制安装过程。 目录结构 config packages data meta 配置文件 config/config.xml packages/[product]/meta/package.xml packages/…

【NCEPU】徐韬:街景字符编码识别比赛

徐韬是华北电力大学数理系大四的学生&#xff0c;Datawhale成员/Dreamtech成员&#xff0c;参加了多期Datawhale的组队学习&#xff0c;也在天池/CCF/讯飞等比赛中取得了不错的成绩&#xff0c;现保送大连理工大学深造。 这篇图文是他在线下组队学习时&#xff0c;为大家分享自…

java 程序启动界面_程序启动界面java代码

最近写了个程序启动界面&#xff0c;分享一下import javax.swing.*;import java.awt.*;import java.net.*;//Download by http://www.codefans.net//程序启动界面/*dkplus专业搜集和编写实用电脑软件教程&#xff0c;*搜集各种软件资源和计算机周边&#xff0c;独立制作视频和p…

中国电子学会图形化四级编程题:食堂取餐

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

获取app传入的json值处理

$getDatas $_POST; if(empty($getDatas)) $getDatas file_get_contents("php://input"); $getDatas json_decode($getDatas,true); 转载于:https://www.cnblogs.com/wjw-/p/8496855.html