北京IT培训分享mysql数据库的优化方法

北京IT培训分享mysql数据库的优化方法,第1张

我们都知道,服务器数据的开发一般都是通过java或者是PHP语言来编程实现的,而为了提高我们数据库的运行速度和效率,数据库优化也成为了我们每日的工作重点,今天,北京IT培训就一起来了解一下mysql服务器数据库的优化方法。

为什么要了解索引

真实案例

案例一:大学有段时间学习爬虫,爬取了知乎300w用户答题数据,存储到mysql数据中。那时不了解索引,一条简单的“根据用户名搜索全部回答的sql“需要执行半分钟左右,完全满足不了正常的使用。

案例二:近线上应用的数据库频频出现多条慢sql风险提示,而工作以来,对数据库优化方面所知甚少。例如一个用户数据页面需要执行很多次数据库查询,性能很慢,通过增加超时时间勉强可以访问,但是性能上需要优化。

索引的优点

合适的索引,可以大大减小mysql服务器扫描的数据量,避免内存排序和临时表,提高应用程序的查询性能。

索引的类型

mysql数据中有多种索引类型,primarykey,unique,normal,但底层存储的数据结构都是BTREE;有些存储引擎还提供hash索引,全文索引。

BTREE是常见的优化要面对的索引结构,都是基于BTREE的讨论。

B-TREE

查询数据简单暴力的方式是遍历所有记录;如果数据不重复,就可以通过组织成一颗排序二叉树,通过二分查找算法来查询,大大提高查询性能。而BTREE是一种更强大的排序树,支持多个分支,高度更低,数据的插入、删除、更新更快。

现代数据库的索引文件和文件系统的文件块都被组织成BTREE。

btree的每个节点都包含有key,data和只想子节点指针。

btree有度的概念d>=1。假设btree的度为d,则每个内部节点可以有n=[d+1,2d+1)个key,n+1个子节点指针。树的大高度为h=Logb[(N+1)/2]。

索引和文件系统中,B-TREE的节点常设计成接近一个内存页大小(也是磁盘扇区大小),且树的度非常大。这样磁盘I/O的次数,就等于树的高度h。假设b=100,一百万个节点的树,h将只有3层。即,只有3次磁盘I/O就可以查找完毕,性能非常高。

索引查询

建立索引后,合适的查询语句才能大发挥索引的优势。

另外,由于查询优化器可以解析客户端的sql语句,会调整sql的查询语句的条件顺序去匹配合适的索引。

在cmd命令提示符下输入

mysql -u root -p回车,然后输入密码回车

进入mysql命令行模式

create database databasename;//创建数据库

use databasename;//使用数据库

create table tablename(

id int not null primary key

);

这样就创建了一个只有id字段的tablename表!

F5ter键。mysql执行按钮是F5ter键,只需要将光标放在SQL语句的最后一行,然后按下F5ter键即可执行。按钮,是一种常用的控制电器元件,常用来接通或断开控制电路,从而达到控制电动机或电气设备运行目的的一种开关。

mysql 通过函数执本地命令、外部程序

昨天接到一个需求,要求在mysql的触发器中执行一个外部程序。

一开始没有什么头绪,后来发现嘿嘿。

id=211

有个叫mysqludf的一个东西,用起来还不错。

不过这个东西仅仅在linux下试了试,效果还行。

步骤如下:

一、解压附件的压缩包之后

如果不想自己编译的话,把lib_mysqludf_sysso文件放到 mysql的lib/mysql/plugin/

目录下。

二、执行chcon -t texrel_shlib_t mysql/lib/mysql/plugin/lib_mysqludf_sysso

三、创建函数

DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;

DROP FUNCTION IF EXISTS sys_get;

DROP FUNCTION IF EXISTS sys_set;

DROP FUNCTION IF EXISTS sys_exec;

DROP FUNCTION IF EXISTS sys_eval;

CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sysso';

CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sysso';

CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sysso';

CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sysso';

CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sysso';

四、测试

1、准备sh文件

在linux系统中执行下面的命令

su mysql

mkdir /mysqlUDFtest

cd mysqlUDFtest

vi testsh

#/bin/sh

date > testlogtxt

chmod +x /testsh

2、准备数据库表和触发器

选择一个数据库执行如下命令:

CREATE TABLE test1(a1 INT) type=InnoDB;

CREATE TABLE test2(a2 INT) type=InnoDB;

CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY) type=InnoDB;

CREATE TABLE test4(

a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

b4 INT DEFAULT 0

) type=InnoDB;

DELIMITER |

DROP TRIGGER /!50032 IF EXISTS / `test``testref`|

create trigger `test``testref` BEFORE INSERT on `test``test1`

for each row BEGIN

DECLARE done INT DEFAULT 999;

INSERT INTO test2 SET a2 = NEWa1;

DELETE FROM test3 WHERE a3 = NEWa1;

UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEWa1;

set done = sys_exec("/mysqlUDFtest/testsh");

IF done != 0 then

INSERT INTO `$amp;<amp ;$gt;22t3`="" (a,b); end="" if;END;

|

执行drop数据库会先将该数据库下的所有表格和数据全部删除,这个过程是需要一定的时间完成的,对应用程序和数据库服务器都会有一定的负担,如果delete的数据量很大,那么该 *** 作所需要的时间就会非常长,这样就会占用很多的CPU资源和内存,可能会导致整个服务阻塞,降低程序执行效率。因此在进行drop *** 作时,需要仔细考虑,确保在适当的时间点执行,同时也需要注意备份所有重要数据。

MySQL是一种常用的开源关系型数据库管理系统,update则是MySQL用来修改表中数据的语句。如果需要对表中的数据进行批量修改,可以使用循环进行多次update,但这样的效率较低,同时也可能会对数据库造成较大的负担。为了提高效率和避免负担,可以将数据按照一定的规则分成若干个部分,每次只更新其中的一部分数据,从而实现批量修改的目的。例如,可以将表中的数据按照主键ID值分成10部分,每次只更新其中的一部分,这样就可以将一次大量的修改 *** 作分解成多个小 *** 作,减少了数据库的负荷。在分批执行的过程中,需要注意一些问题。首先,分批的原则需要合理,应该根据实际需求来决定分成多少份。其次,每次执行update *** 作的记录数应该适当,不能过大或过小,以免对数据库的性能产生不利影响。最后,对于数据安全性要求比较高的情况,需要保证分批 *** 作的顺序和完整性。需要注意的是,分批execute update *** 作是很好的方法来避免影响CPU浪费等问题,并且对于大数据集 *** 作可以提高效率。但是,在数据量较小的情况下,使用分批进行更新 *** 作可能会增加不必要的复杂性,并且会降低代码的可读性和可维护性。因此,在进行MySQL update *** 作时,需要根据实际情况来决定是否使用分批方式。

以上就是关于北京IT培训分享mysql数据库的优化方法全部的内容,包括:北京IT培训分享mysql数据库的优化方法、如何创建从VC和MySQL代码的可执行安装程序吗、mysql执行按钮是哪个等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9284586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存