mysql优化

本文深入探讨MySQL优化策略,涵盖表设计合理性、索引添加、分表技术、读写分离、存储过程、配置优化、硬件升级、数据清理等多个方面。详细解析1NF、2NF、3NF规范及其对数据库设计的影响,同时提供MySQL慢查询日志配置、索引类型(主键、唯一、全文、普通、复合)创建与管理的方法,并阐述如何通过EXPLAIN语句分析SQL执行效率。文章最后对比MySQL存储引擎(MyISAM、InnoDB、MEMORY),指导选择合适的存储方案。

对mysql优化是一个综合性的技术,主要包括

a: 表的设计合理化(符合3NF)

b: 添加适当索引(index) [五种: 普通索引、主键索引、唯一索引unique、全文索引,复合索引]

c: 分表技术(水平分割、垂直分割)

d: 读写[写:update/delete/add]分离

e: 存储过程 [模块化编程,可以提高速度]

f: 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]

g: mysql服务器硬件升级

h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)

表的范式,是首先符合1NF,才能满足2NF , 进一步满足3NF

1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sqlserver),就自动的满足1NF

 数据库的分类

关系型数据库:mysql/oracle/db2/informix/sysbase/sql server

非关系型数据库: (特点: 面向对象或者集合)

NoSql数据库: memcache  redis   MongoDB(特点是面向文档)

2NF: 表中的记录是唯一的, 就满足2NF, 通常我们设计一个主键来实现

3NF: 即表中不要有冗余数据, 可以通过设置外键来实现

但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余


 show[session|global] status like .... 如果你不写 [session|global] 默认是session 会话,指取出当前窗口的执行,如果你想看所有(从mysql 启动到现在,则应该 global)

show status like ‘slow_queries’;显示慢查询次数

show status like ‘connections’; 显示连接数据库的次数

show status like ‘uptime’ ;    显示服务器工作的时间

show stauts like ‘com_select’  showstauts like ‘com_insert’ ...类推 update  delete


修改mysql的慢查询.

show variables like ‘long_query_time’ ; //可以显示当前慢查询时间

set long_query_time=1 ;//可以修改慢查询时间

在默认情况下,我们的mysql不会记录慢查询,需要在启动mysql时候,指定记录慢查询才可以

bin\mysqld.exe - -safe-mode  - -slow-query-log [mysql5.5 可以在my.ini指定]

bin\mysqld.exe  --log-slow-queries=d:/abc.log [低版本mysql5.0可以在my.ini指定]

先关闭mysql,再启动, 如果启用了慢查询日志,在相应的目录下即可看多多出了个文件

通过 explain 语句可以分析,mysql如何执行你的sql语句

五种索引(主键索引/唯一索引/全文索引/普通索引|复合索引)

 

1.      添加

1.1主键索引添加

当一张表,把某个列设为主键的时候,则该列就是主键索引

create table aaa

(id int unsigned primary key auto_increment,

name varchar(32) not null defaul ‘’);

这是id 列就是主键索引.

如果你创建表时,没有指定主键索引,也可以在创建表后,在添加, 指令:

alter table 表名 add primary key (列名);

举例:

create table bbb (id int , name varchar(32)not null default ‘’);

alter table bbb add primary key (id);

 

1.2普通索引

一般来说,普通索引的创建,是先创建表,然后在创建普通索引

比如:

create table ccc(

id int unsigned,

name varchar(32)

)

create index 索引名 on 表 (列1,列名2);

 

1.3创建全文索引

全文索引,主要是针对对文件,文本的检索, 比如文章, 全文索引针对MyISAM有用.

创建 :

CREATE TABLE articles (

      id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,

      title VARCHAR(200),

      body TEXT,

      FULLTEXT (title,body)

    )engine=myisam charset utf8;

如何使用全文索引:

错误用法:

select * from articles where body like ‘%mysql%’;【不会使用到全文索引】

证明:

explain select * from articles where body like ‘%mysql%’

正确的用法是:

select * from articles wherematch(title,body) against(‘database’); 【可以】

1.      在mysql中fulltext 索引只针对 myisam生效

2.       mysql自己提供的fulltext针对英文生效->sphinx(coreseek)技术处理中文

3.      使用方法是 match(字段名..) against(‘关键字’)

全文索引一个 叫 停止词,  因为在一个文本中,创建索引是一个无穷大的数,因此,对一些常用词和字符,就不会创建,这些词,称为停止词


1.4唯一索引

①当表的某列被指定为unique约束时,这列就是一个唯一索引

create table ddd(id int primary key auto_increment , name varchar(32) unique);

这时, name 列就是一个唯一索引.

unique字段可以为NULL,并可以有多NULL, 但是如果是具体内容,则不能重复.

主键字段,不能为NULL,也不能重复.

②在创建表后,再去创建唯一索引

create table eee(id int primary key auto_increment, name varchar(32));

create unique index 索引名 on 表名 (列表..);

1.5 复合索引就是多个字段的普通索引

alter table 表 add  index  索引名(字段1,字段2)

添加索引一种更万能的写法    alter table 表 add  (index | unique | fulltext)  索引名

1.      查询索引

desc 表名【该方法的缺点是: 不能够显示索引名.】

show index(es) from 表名

show keys from 表名

2.      删除

alter table 表名 drop index 索引名;

如何删除主键索引。

alter table 表名 change id id int(10);//删除自增长

alter table 表名 drop primary key 


3.      修改

先删除,再重新创建.


索引的代价:

1.      占用磁盘空间

2.      对dml操作有影响,变慢

 在哪些列上适合添加索引?

总结: 满足以下条件的字段,才应该创建索引.

a: 肯定在where条件经常使用 b: 该字段的内容不是唯一的几个值(sex) c: 字段内容不是频繁变化.

 

 使用索引的注意事项

1, 对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用

2,对于使用like的查询,查询如果是 %aaa不会使用到索引       ‘aaa%’会使用到索引。

      不能使用索引,即,在like查询时,关键的 ‘关键字’ , 最前面,不能使用 % 或者 _这样的字符., 如果一定要前面有变化的值,则考虑使用全文索引->sphinx.

3.      如果条件中有or,即使其中有条件带索引也不会使用。换言之,就是要求使用的所有字段,都必须建立索引, 我们建议大家尽量避免使用or关键字

4.      如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不使用索引。(添加时,字符串必须’’), 也就是,如果列是字符串类型,就一定要用 ‘’ 把他包括起来.

5.      如果mysql估计使用全表扫描要比使用索引快,则不使用索引。

 

explain 可以帮助我们在不真正执行某个sql语句时,就执行mysql怎样执行,这样利用我们去分析sql指令.

 如何查看索引使用的情况:

show status like‘Handler_read%’;

大家可以注意:
handler_read_key:        这个值越高越好,越高表示使用索引查询到的次数。

handler_read_rnd_next:      这个值越高,说明查询低效。

 

sql语句的小技巧

1.      在使用group by 分组查询是,默认分组后,还会排序,可能会降低速度.

比如:  在group by 后面增加 order by null 就可以防止排序.

2.      有些情况下,可以使用连接来替代子查询。因为使用join,MySQL不需要在内存中创建临时表。

select * fromdept, emp where dept.deptno=emp.deptno; [简单处理方式]

select * fromdept left join emp on dept.deptno=emp.deptno; [左外连接,更ok!]

 如何选择mysql的存储引擎

在开发中,我们经常使用的存储引擎 myisam / innodb/ memory

myisam 存储: 如果表对事务要求不高,同时是以查询和添加为主的,我们考虑使用myisam存储引擎. ,比如 bbs 中的 发帖表,回复表.

INNODB 存储: 对事务要求高,保存的数据都是重要数据,我们建议使用INNODB,比如订单表,账号表.

 

 

MyISAM 和 INNODB的区别

1. 事务安全                 myisam 不支持事务    innodb 支持

2. 查询和添加速度    myisam  好于 innodb

3. 支持全文索引        myisam 支持            innodb不支持

4. 锁机制                   myisam 表锁             innodb 行锁

5. 外键 MyISAM 不支持外键,  INNODB支持外键. (在PHP开发中,通常不设置外键,通常是在程序中保证数据的一致)

Memory 存储,比如我们数据变化频繁,不需要入库,同时又频繁的查询和修改,我们考虑使用memory, 速度极快.

如果你的数据库的存储引擎是myisam,请一定记住要定时进行碎片整理

optimize tablet  表名;

mysql_query(“optimizetables $表名”);


mysql 备份

mysqldump -uroot -p  数据库 表1 表2  > 备份名

恢复

在mysql里  source  备份名     

mysqldump -uroot -p  数据库 <  备份名 





标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值