服务器架构之性能扩展-第五章(6)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
第五章 Mysql性能优化
5.1mysql基本操作
5.1.1mysql表复制
Mysql>create table t2 like t1;           //复制表结构
Mysql>insert into t2 select * from t1;    //复制数据内容

 

索引是一种快速查询的有效方法,可以通过alter增加索引或create语句创建。
mysql>alter table t1 add ind_id (id);
mysql>alter table t1 add unique/primary key (id);
mysql>create index ind_id on table t1 (id);
mysql>show index from t1;
mysql>drop index ind_id on table t1;
mysql>alter table t1 drop index ind_id;
Unique索引时指唯一索引,是没有重复行的索引。

 

Alter方法创建和删除索引

 

删除主键,如果索引列是自动增长的变量。首先要取消自动增长,然后才可以删除主键,因为自动增长序列默认为主键。
 

 

增加自动增长主键索引

 

5.1.3mysql视图
视图:是存在于表之外的另一张表,符合条件的查询结果
Mysql>create view v_t1 as select * from t1 where id >10;
Mysql>drop view v_t1;

 

视图时随着主表而变化的表

 

5.1.4   mysql内置函数
字符串函数:
Concat (string1,……) //连接字符串
Lcase(string1) //换成小写
Ucase(string1)//换成大写
Length(string1) //string1的长度
Rtrim(string1) //去除后端空格
Ltrim(string1)//取出前段空格
Repeat (string1,count)//重复count次
Replace(str,search_str,replace_str) //在str中,用replace_str代替search_str
Substring(str,position,length) //从str的position开始,取length个字符
Space(count) //生成count个空格

 

数学函数:
Bin(number)//十进制转为二进制
Ceiling(string1)//向上取整
Floor(string)//向下取整
Max(col)//取最大值,聚合时使用
Min(col)//取最小值,聚合时使用
Sqrt(number)//开平方
Rand()//返回0-1内的随即取值
 

 

日期函数:
Curdate() //返回当前日志
Curtime() //返回当前时间
Now() //返回当前日期时间
Week(date) //返回这是多少周
Year(date) //返回年份
Datediff(date1,date2) //返回开始时间date1和结束时间date2间天数
 
 

 

5.1.5 mysql预处理语句
预处理是传递一个参数作为where判断语句:
Mysql>prepare hello from “select * from t1 where id >?”;
Mysql>set @i=1;
Mysql>excute hello using @i;
Mysql>drop prepare stml;
 

 

5.1.6   mysql 事务处理

mysql>set autocommit=0;       //关闭自动提交

mysql>delete from t1 where id=11; //
mysql>savepoint p1;         //建立一个还原点
mysql>delete from t1 where id=10;
mysql>savepoint2;
mysql>rollback to p1; //恢复到p1还原点,p2自动失效
mysql>rollback; //退回到原始还原点
修改引擎,使用事处理功能,要使用innodb引擎才可以。

 

回滚恢复数据

 

设置回滚点

 

存储是一种批量插入数据的方法,需要先将结尾符改为//,最后再改回来,然后通过call命令来调用存储

 

5.1.8mysql触发器
触发器是一种当完成某项动作的同时,可以同时调用其它数据库进程同时进行。通过create trigger创建。
提前存在的值则old,不存在则new。
Insert 型触发器:

 

Delete 型触发器

 

Update 型触发器:

 

联合查看:可以使用联合查看来查询触发与否

 

5.1.9重排auto_increment
常用的删除数据表内容有如下两种方法:
Mysql>delete from t1; //清除表的内容,改变结构
Mysql>truncate table t1; //清楚表的内容,不改变结构,速度快常用
Mysql>alter table t1 auto_increment=1; //如果自动增长值不是从1开始可以这样调整
5.1.10常见sql技巧
正则表达式:

 

Mysql>select name,email from t where email pegexp “@163[,.]com$”; //匹配@163.com或@163,com邮箱

Mysql>select name,email from t where emal like “@163.com” or email kike “@163,com”;

Rand() 随机:
Mysql>select * from t order by rand() limit 3; //随机3条数据
Group by 的排序扩展
Mysql>select cname,pname,count(pname) from t group by cname,pame with rollup;    //分别对个结果进行排序和统计
创建外键:

Mysql>create table t3(id int,name char(20), foreign kye (id) references t2(id) on delete cascade on update cascade); //创建t3使用外键t2

Mysql help 使用:
Mysql>? Create 查看命令和用法
5.2.1优化sql语句一般步骤
首先查看各种语句使用频率
Mysql>show 【session/global】 status; //session当前连接,global表示数据启动至今
登陆以来进行增删改查的次数

 

Com_update,com_delete分别表示更新和删除次数。
对于innodb引擎可以使用以下查询语句,innodb_rows_delete/update/select/insert
Innodb引擎是影响的行数,myisam引擎是影响的次数。
Innodb是影响的行数,myisam是影响的次数。
Connections代表连接数,uptime代表连接时间,slow_queries代表慢查询次数。

 

定位执行效率低的语句
Mysql>explain select * from t where id=1000;
Mysql>desc select * from t where id=1000;

 

我们重点看一下影响行数。
对一个表增加索引之后,查询范围由9变2,快多了。

 

5.2.2 mysql索引
索引是优化mysql数据库最常用的方法,使用索引注意以下几点。

1,              ,对于复合索引,一般只对左边的索引有效。

2,              使用通配符时,like左边不能用通配符

例:mysql>explain select * from t where name like “%3”\G //不会使用索引
3.对于null的搜索is null
例:mysql>desc select * from t where name is null \G
1.对于行数低于100的数据表,索引效果不是很好
2.联合查询语句语句要都使用索引,才会使用索引
3.如果索引列是字符串,则查询时要加“”
4.对于handler_read_rnd_next参数较大的,应该建立索引

 

5.3常用sql优化
5.3.1 提高数据的导入效率
常用导入数据的方法是通过outfile进行的。通过outfile导出数据,这时是表内容,非表结构。例如导出数据

 

 

导入数据

 

对于innodb引擎表可以通过以下方法提高速度:
1、通过set unique_checks=0,关闭唯一性效验,导入数据完毕后再set unique_checks=1;恢复唯一性效验。
2、关闭自动提交,提高导入效率。导入数据前执行set autocommit=0关闭自动提交;导入后set autocommit=1,恢复自动提交。
5.3.2优化insert语句
使用insert delayed可以使数据库得到更高的效率。并且可以增加bulk_inser_buffer_size的变量值来提高速度
5.3.3 避免使用嵌套查询

 

 

5.4数据库的优化
数据库的优化一般可以通过拆分表提高表的访问效率,这也可以解决大存储量;使用中间表技术提高查询速度,中间表一般就是视图技术。
5.4.1myisam锁定
数据库锁定可以使用lock table t read/write;
读锁,有一个人读锁,其他人可读不可以写。
写锁,只有本人可以进行增删改查,其他人不能读写。

 

5.4.2四种字符集问题
Mysql>status;查看系统字符集。它包括服务器字符集,数据库字符集,客户端字符集,链接字符集
 

 

 

 

 

字符集可以通过/etc/my.cnf配置文件进行修改
【client】用于定义客户端字符集和链接字符集

【mysqld】控制着服务器字符集和数据库字符集
下面的collation-server是校验字符集

Mysql>show character set; //查看校验字符集

5.4.3bin_log日志
Bin_log日志是系统进行恢复的重要日志

通过修改/etc/my.cnf文件,去掉#号即可

5.4.4慢查询日志
慢查询日志是进行数据库优化的基础。
Vi /etc/my.cnf
Log_slow_queries=slow.log     //开启慢查询
Log_query_time=5           //设置慢查询的时间

5.4.5socket问题
Socket默认是位于/tmp/mysql.sock, mysql的启动需要socket文件,当然可以通过重启数据库自动建立socket,也可以不用socket便实现登陆。可以使用
Mysql>mysql –u root –p –protocol tcp –hlocalhost
5.4.6 root密码丢失
Service mysqld stop
Mysql_safe –skip-grant-tables –user=mysql &    //跳过授权表
Mysql –uroot

Mysql>update user set password=password(“123”) where user=”root” and host=”localhost”;

或mysql>set password for root@loaclhost=password(“123”);

mysql>set password=password(“123”);   //修改密码 


本文转自zsaisai 51CTO博客,原文链接:http://blog.51cto.com/3402313/967194

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
29天前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
1月前
|
存储 弹性计算 算法
倚天产品介绍|倚天ECS加速国密算法性能
倚天ECS是阿里云基于平头哥自研数据中心芯片倚天710推出arm架构实例,采用armv9架构,支持SM3/SM4指令,可以加速国密算法性能。本文基于OpenSSL 3.2和Tongsuo 实测对比了倚天ECS g8y实例和Intel g7 实例国密性能。为用户选择ECS提供参考。
|
29天前
|
监控 持续交付 API
构建高效可扩展的微服务架构
在当今快速迭代和竞争激烈的软件市场中,构建一个高效、可扩展且易于维护的后端系统变得尤为重要。微服务架构作为一种流行的分布式系统设计方式,允许开发者将应用程序划分为一系列小型、自治的服务,每个服务负责执行特定的业务功能。本文将探讨如何利用现代技术栈搭建一个符合这些要求的微服务架构,并讨论其潜在的挑战与解决方案。我们将涵盖服务划分策略、容器化、服务发现、API网关、持续集成/持续部署(CI/CD)以及监控和日志管理等关键主题,以帮助读者构建出既可靠又灵活的后端系统。
|
1月前
|
监控 Kubernetes 持续交付
构建高效可扩展的微服务架构:后端开发实践指南
在数字化转型的浪潮中,企业对软件系统的要求日益提高,追求快速响应市场变化、持续交付价值成为核心竞争力。微服务架构以其灵活性、模块化和独立部署的特点,成为解决复杂系统问题的有效途径。本文将深入探讨如何构建一个高效且可扩展的微服务架构,涵盖关键设计原则、技术选型及实践案例,为后端开发者提供一条清晰的指导路线,帮助其在不断变化的技术环境中保持竞争力。
130 3
|
1月前
|
编解码 弹性计算 Cloud Native
倚天使用|倚天ECS视频编解码之x264性能
在平头哥发布了首颗为云而生的 CPU 芯片倚天710之后,搭载倚天 710 的 ECS 实例表现出强劲的性能实力,在x264编解码场景下有着极高的性价比。
|
1月前
|
存储 弹性计算 关系型数据库
阿里云服务器ESSD云盘性能等级PL0、PL1、PL2、PL3区别,云盘性能级别PL知识点参考
在我们选择阿里云服务器系统盘和数据盘时,如果是选择ESSD云盘,还需要选择云盘的云盘性能级别PL,PL性能级别有PL3、PL2、PL1、PL0四个性能级别的云盘规格,如果是通过阿里云的活动来购买云服务器的话,由于系统盘默认一般为20G或40G容量,可选的PL性能级别通常只有PL0(单盘IOPS性能上限1万)和PL1(单盘IOPS性能上限5万)可选择,有的用户肯能并不清楚ESSD云盘的性能等级之间有何区别,单盘IOPS性能指的是什么,本文为大家介绍一下ESSD云盘的云盘性能级别PL3、PL2、PL1、PL0相关知识点。
阿里云服务器ESSD云盘性能等级PL0、PL1、PL2、PL3区别,云盘性能级别PL知识点参考
|
22天前
|
存储 缓存 监控
构建高效可扩展的后端服务架构
在当今互联网时代,构建高效可扩展的后端服务架构对于企业的业务发展至关重要。本文将探讨如何通过合理设计和优化后端服务架构,实现系统的高性能、高可用性和易扩展性,从而满足不断增长的业务需求和用户规模。
17 0
|
11天前
|
运维 监控 自动驾驶
构建可扩展的应用程序:Apollo与微服务架构的完美结合
构建可扩展的应用程序:Apollo与微服务架构的完美结合
32 10
|
21天前
|
负载均衡 网络协议 Java
构建高效可扩展的微服务架构:利用Spring Cloud实现服务发现与负载均衡
本文将探讨如何利用Spring Cloud技术实现微服务架构中的服务发现与负载均衡,通过注册中心来管理服务的注册与发现,并通过负载均衡策略实现请求的分发,从而构建高效可扩展的微服务系统。
|
1月前
|
弹性计算 小程序 开发者
阿里云服务器性能测评:25M带宽阿里云云服务器支持多少人访问?
在深入探讨25M带宽云服务器的性能时,我们首先要明确一个核心概念:带宽与服务器能够支持的同时访问量之间存在着直接的关联。那么,大家可能会好奇,带宽为25M的云服务器究竟能够支持多少用户同时访问呢?
126 0