MySQL优化

MySQL 优化 基于规则优化 14 基于规则的优化 ​ MySQL会基于一些规则重写我们写的语句,使得查询的执行更加高效 表的结构 # 表single_table CREATE TABLE single_table ( id int not null auto_increment, key1 VARCHAR(100), key2 int, key3 varchar(100), key_part1 varchar(100), 阅读详情

1 设计优化

1.1 字段设计

1.尽量使用整型表示字符串。

2.decimal不会损失精度,存储空间会随数据的增大而增大。double占用固定空间,较大数的存储会损失精度。

3.尽可能选择小的数据类型和指定短的长度。

4.尽可能使用 not null。

5.单表字段不宜过多。

1.2 数据库设计三范式

  • 第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。

  • 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。

  • 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

1.3 存储引擎选择

1.3.1 存储差异

 MyISAMInnodb
文件格式数据.MYD和索引.MYI分别存储数据和索引集中存储.ibd
文件能否移动能,一张表对应.frm、MYD、MYI文件否,关联的还有data下文件
记录存储顺序按记录插入顺序保存按主键大小有序插入
空间碎片产生不产生
事务不支持支持
外健不支持支持
锁支持表级锁定行级锁定,表级锁定

1.3.2 选择依据

MyISAM:以读写插入为主的应用程序,比如博客系统、新闻门户网站。

Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键保证数据完整性。比如OA自动化办公系统。

2 索引优化

2.1 概念

关键字与数据的映射关系称为索引(包含关键字和对应的记录在磁盘中的地址)。

2.2 索引类型

  • 普通索引:对关键字没有限制

  • 唯一索引:要求记录提供的关键字不能重复

  • 主键索引:要求关键字唯一且不为null

2.3 索引的存储结构

  • BTree

    多路查找平衡树,BTree的一个node可以存储多个关键字,node的大小取决于计算机的文件系统,因此我们可以通过减小索引字段的长度使结点存储更多的关键字。

  • B+Tree聚簇结构

    在MySQL中,仅仅只有Innodb的主键索引为聚簇结构,其它的索引包括Innodb的非主键索引都是典型的BTree结构。

  • 哈希索引

    在索引被载入内存时,使用哈希结构来存储。

2.4 创建索引

  • 创建表之后建立索引

    -- 更改表结构alter table user_index-- 创建一个first_name和last_name的复合索引,并命名为nameadd key name (first_name,last_name),-- 创建一个id_card的唯一索引,默认以字段名作为索引名add UNIQUE KEY (id_card),-- 鸡肋,全文索引不支持中文add FULLTEXT KEY (information);
  • 创建表时指定索引

    CREATE TABLE user_index2 (    id INT auto_increment PRIMARY KEY,    first_name VARCHAR (16),    last_name VARCHAR (16),    id_card VARCHAR (18),    information text,    KEY name (first_name, last_name),    FULLTEXT KEY (information),    UNIQUE KEY (id_card));

2.5 索引优化

可以通过explain selelct来分析SQL语句执行前的执行计划

  • 建立基础索引:在where、order by、join字段上建立索引。

  • 优化,组合索引:基于业务逻辑

  • 如果条件经常性出现在一起,那么可以考虑将多字段索引升级为复合索引

  • 如果通过增加个别字段的索引,就可以出现索引覆盖,那么可以考虑为该字段建立索引

  • 查询时,不常用到的索引,应该删除掉

简要解释下explain各个字段的含义

  • id : 表示SQL执行的顺序的标识,SQL从大到小的执行

  • select_type:表示查询中每个select子句的类型

  • table:显示这一行的数据是关于哪张表的,有时不是真实的表名字

  • type:表示MySQL在表中找到所需行的方式,又称“访问类型”。常用的类型有:ALL, index, range, ref, eq_ref, const, system, NULL(从左到右,性能从差到好)

  • possible_keys:指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用

  • Key:key列显示MySQL实际决定使用的键(索引),如果没有选择索引,键是NULL。

  • key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)

  • ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

  • rows:表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数,理论上行数越少,查询性能越好

  • Extra:该列包含MySQL解决查询的详细信息

2.6 索引失效的场景

1.当语句中带有or的时候 即使有索引也会失效。

select * from USER where name='xzz' or age=16;

2.当语句索引 like %在前面的时候索引失效(注意:如果上句为 like ‘some%’此时索引是生效的)。

select *  from  USER where name like '%xzz' ;

3.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。

select * from USER where name=123;

4.mysql联合索引有最左原则,需要按照顺序。将name和age设置为联合索引。

select * from USER where age=11 and name='xzz';

5.在索引上进行计算操作。

select * from USER where age-1>11;

6.负向查询不能使用索引

select name from user where id not in (1,3,4);

3 SQL语句优化

3.1 sql优化

  • 数据库导入大量数据时,可以先禁用索引和约束alter table table-name disable keys,导入后开启alter table table-name enable keys。

  • limit offset,rows 尽量保证不要出现大的offset,比如limit 10000,10相当于对已查询出来的行数弃掉前10000行后再取10行。

  • order by 不要用rand(),效率低。在应用程序中,将随机的主键生成好,去数据库中利用主键检索。

  • select() count()少用*,如果确定只查询一条数据,可以用limit 1。

3.2 慢查询日志

用于记录执行时间超过某个临界值的SQL日志,用于快速定位慢查询,为我们的优化做参考。

3.2.1 开启慢查询日志

配置项:slow_query_log

可以使用show variables like ‘slov_query_log’查看是否开启,如果状态值为OFF,可以使用set GLOBAL slow_query_log = on来开启,它会在datadir下产生一个xxx-slow.log的文件。

3.2.2 设置临界时间

配置项:long_query_time

查看:show VARIABLES like 'long_query_time',单位秒

设置:set long_query_time=0.5

实操时应该从长时间设置到短的时间,即将最慢的SQL优化掉

3.2.3 查看日志

一旦SQL超过了我们设置的临界时间就会被记录到xxx-slow.log中

3.3 profile信息

3.3.1 查看状态,并开启

show variables like 'profiling';--查看状态
set profiling=on;--开启
show profiles;--查看profile信息

3.3.2 通过ID查看某条sql所有详细步骤的时间

通过show profiles;查找到ID,使用show profile for query Query_ID查询经过了哪些步骤,各消耗了多场时间。

4 横向扩展(MySQL集群、负载均衡、读写分离)

4.1 数据库分区

当数据量较大时(一般千万条记录级别以上),MySQL的性能就会开始下降,这时我们就需要将数据分散到多组存储文件,保证其单个文件的执行效率。

4.1.1 分区管理语法

  • range/list

    alter table article_range add partition(
        partition p201811 values less than (1543593599) -- select UNIX_TIMESTAMP('2018-11-30 23:59:59')    
        -- more
    );
    alter table article_range drop PARTITION p201808;--删除分区后,分区中原有的数据也会随之删除!
  • key/hash

    alter table article_key add partition partitions 4;--新增
    alter table article_key coalesce partition 6;--删除不会删除数据

4.1.2 mysql分区算法

  • hash(field)

    相同的输入得到相同的输出。输出的结果跟输入是否具有规律无关。仅适用于整型字段。

    create table article(    
        id int auto_increment PRIMARY KEY,    
        title varchar(64),   
        content text
    )PARTITION by HASH(id) PARTITIONS 10;
  • key(field)

    和hash(field)的性质一样,只不过key是处理字符串的,比hash()多了一步从字符串中计算出一个整型在做取模操作。

    create table article_key(
        id int auto_increment,
        title varchar(64),
        content text,
        PRIMARY KEY (id,title)  -- 要求分区依据字段必须是主键的一部分
        )PARTITION by KEY(title) PARTITIONS 10;
  • range算法

    是一种条件分区算法,按照数据大小范围分区(将数据使用某种条件,分散到不同的分区中)。

      create table article_range(
          id int auto_increment,
          title varchar(64),
          content text,
          created_time int,   -- 发布时间到1970-1-1的毫秒数
          PRIMARY KEY (id,created_time)   -- 要求分区依据字段必须是主键的一部分
      )charset=utf8PARTITION BY RANGE(created_time)(
          PARTITION p201808 VALUES less than (1535731199),    -- select UNIX_TIMESTAMP('2018-8-31 23:59:59')    
          PARTITION p201809 VALUES less than (1538323199),    -- 2018-9-30 23:59:59
          PARTITION p201810 VALUES less than (1541001599) -- 2018-10-31 23:59:59
      );
  • list算法

    也是一种条件分区,按照列表值分区(in (值列表))。

      create table article_list(
          id int auto_increment,
          title varchar(64),
          content text,
          status TINYINT(1),-- 文章状态:0-草稿,1-完成但未发布,2-已发布
          PRIMARY KEY (id,status) -- 要求分区依据字段必须是主键的一部分
          )charset=utf8PARTITION BY list(status)(
          PARTITION writing values in(0,1),   -- 未发布的放在一个分区
          PARTITION published values in (2)   -- 已发布的放在一个分区
      );
      insert into article_list values(null,'mysql优化','内容示例',0);
      flush tables;

4.2 大表分表

  • 垂直分表: 根据数据库里面数据表的相关性进行拆分。 例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表,甚至放到单独的库做分库。简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。

    • 垂直拆分的优点: 可以使得列数据变小,在查询时减少读取的Block数,减少I/O次数。此外,垂直分区可以简化表的结构,易于维护。

    • 垂直拆分的缺点: 主键会出现冗余,需要管理冗余列,并会引起Join操作,可以通过在应用层进行Join来解决。此外,垂直分区会让事务变得更加复杂;

  • 水平分表: 保持数据表结构不变,通过某种策略存储数据分片。这样每一片数据分散到不同的表或者库中,达到了分布式的目的。 水平拆分可以支撑非常大的数据量。 数据库分片的两种常见方案:

    • 客户端代理: 分片逻辑在应用端,封装在jar包中,通过修改或者封装JDBC层来实现。 当当网的 Sharding-JDBC 、阿里的TDDL是两种比较常用的实现。

    • 中间件代理: 在应用和数据中间加了一个代理层。分片逻辑统一维护在中间件服务中。 我们现在谈的 Mycat 、360的Atlas、网易的DDB等等都是这种架构的实现。

4.3 集群

单中心双机的常见方案有以下这些:

  • 一主一备的架构(主备式)

    将数据库部署到两台机器,其中一台机器(代号A)作为日常提供数据读写服务的机器,称为「主机」。另外一台机器(代号B)并不提供线上服务,但会实时的将「主机」的数据同步过来,称为「备机」。一旦「主机」出了故障,通过人工的方式,手动的将「主机」踢下线,将「备机」改为「主机」来继续提供服务。

    缺点:人工干预。

  • 一主一从的架构(主从式)

    主从式架构中的「从机」虽然也在随时随刻提供服务,但是它只提供「读」服务,并不提供「写」服务。「主机」会实时的将线上数据同步到「从机」,以保证「从机」能够正常的提供读操作。

    主从双机自动切换: 当主机出现故障后,从机能够自动检测发现。同时从机将自己迅速切换为主机,将原来的主机立即下线服务,或转换为从机状态。

    缺点:数据同步延迟。

  • 互为主从的架构(主主式)

    互为主从的架构是指两台机器自己都是主机,并且也都是作为对方的从机。两台机器都提供完整的读写服务,因此无需切换,客户机在调用的时候随机挑选一台即可,当其中一台宕机了,另外一台还可以继续服务。

    缺点:双向复制,数据延迟或丢失。

4.4 读写分离

读写分离是依赖于主从复制,而主从复制又是为读写分离服务的。因为主从复制要求slave不能写只能读(如果对slave执行写操作,那么show slave status将会呈现Slave_SQL_Running=NO,此时你需要按照前面提到的手动同步一下slave)。

4.4.1 定义两种连接

就像我们在学JDBC时定义的DataBase一样,我们可以抽取出ReadDataBase,WriteDataBase implements DataBase,但是这种方式无法利用优秀的线程池技术如DruidDataSource帮我们管理连接,也无法利用Spring AOP让连接对DAO层透明。

4.4.2 使用Spring AOP

在调用DAO接口时根据接口方法命名规范(增addXXX/createXXX、删deleteXX/removeXXX、改updateXXXX、查selectXX/findXXX/getXX/queryXXX)动态地选择数据源(读数据源对应连接master而写数据源对应连接slave),那么就可以做到读写分离了。(可以参考:Spring 动态切换、添加数据源实现以及源码浅析)

4.5 负载均衡

4.5.1 负载均衡算法

  • 轮询

  • 加权轮询:按照处理能力来加权

  • 负载分配:依据当前的空闲状态(但是测试每个节点的内存使用率、CPU利用率等,再做比较选出最闲的那个,效率太低)

4.5.2 高可用

在服务器架构时,为了保证服务器7x24不宕机在线状态,需要为每台单点服务器(由一台服务器提供服务的服务器,如写服务器、数据库中间件)提供冗余机。(推荐:mysql+mycat搭建稳定高可用集群)

对于写服务器来说,需要提供一台同样的写-冗余服务器,当写服务器健康时(写-冗余通过心跳检测),写-冗余作为一个从机的角色复制写服务器的内容与其做一个同步;当写服务器宕机时,写-冗余服务器便顶上来作为写服务器继续提供服务。对外界来说这个处理过程是透明的,即外界仅通过一个IP访问服务。

深入解析高通Adreno DPU的DRM/KMS驱动架构与硬件协同设计 本文深入解析了高通Adreno DPU的DRM/KMS驱动架构与硬件协同设计,详细介绍了Adreno DPU的核心模块组成、显示接口设计以及DRM驱动架构。通过实际案例和调试技巧,帮助开发者理解硬件与软件的协同工作原理,优化显示性能并解决常见问题。 阅读详情

相关推荐

abap中使用Screen painter为普通屏幕创建单选按钮组radiobutton组的过程

选择屏幕中,创建radiobutton组直接使用代码实现,如下所示 SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001. PARAMETERS R1 RADIOBUTTON GROUP GR1. PARAMETERS R2 RADIOBUTTON GROUP GR1. PARAMETERS R3 RADIOBUTTON GR

charliefromkansas的博客 8303

MySQL的优化

在应用的开发过程中,由于初期数据量小,开发人员写SQL语句更加重视功能上的实现,但是当应用系统正式上线后,随着数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的SQL语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化.

weixin_71629261的博客 2282

深入RK3588内存管理:如何用dma_buf_alloc和mpp_buffer为RGA2分配4G以内内存(附kernel版本选择)

本文深入探讨了RK3588平台上RGA2核心的4G内存限制问题,详细解析了dma_buf_alloc和mpp_buffer两种内存分配方案的技术细节与适用场景。通过代码示例和性能对比,帮助开发者优化高分辨率视频处理流程,并提供了内核版本选择与常见错误排查指南。

weixin_29168153的博客 367

MySQL 优化

调优思路 对查询进行缓存 强制限制 MySQL 资源设置 关键字缓冲区 调优思路 1. 硬件优化 2. 数据库设计与规划--以后再修改很麻烦,估计数据量,使用什么存储引擎 3. 数据的应用--怎样取数据,SQL语句的优化 4. 磁盘 IO优化 5. 操作系统的优化--内核、TCP连接数量 6. MySQL服务优化--内存的使用,磁盘的使用 7. my.cnf 内参数的优化 8. 分库分表思路和优劣 硬件优化 CPU—— 64 位、高主频、高缓存,高并行处理能力 内存——大内存、主频高,尽量不要用

1837

DeepSeek研发的精算大模型「精卫」已实现98%精算任务覆盖,中国人寿采用后年节约3.2亿元技术采购成本,形成关键技术替代效应

根据现有资料,精算领域关键技术替代效应的行业标准定义尚未明确具体提及。然而,可以从相关文献中提取一些关键概念和方法来推导出可能的定义。​替代效应的基本定义​:替代效应是指一种商品价格变动引起另一种商品的相对价格变动,从而导致消费者在维持原有效用水平不变的条件下对商品需求量做出的调整。​技术替代效应​:在精算领域,技术替代效应可以理解为新技术或新方法对现有技术或方法的替代,从而影响精算模型、数据处理和决策过程。例如,机器学习在精算中的应用日益增长,改变了精算师的工作方式和模型构建方法。​。

百态·数智思维 | 聚焦大数据、量化与未来AI 1714

具身智能:从理论突破到场景落地的全解析

具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区别于传统 AI 的 “离身性”(如语音助手仅依赖数据输入),具身智能强调 “智能体通过身体感知世界并反作用于环境”,形成 “感知 - 决策 - 行动” 的闭环。例如,能自主避障的配送机器人、可精准抓取异形物体的机械臂,均通过传感器网络与环境实时互动,在试错中优化行为策略。

LeeKumaの技术Note 2683

MySQL8.0优化 - 优化MySQL服务器、优化MySQL的参数、优化数据类型

MySQL8.0优化 - 优化MySQL服务器、优化MySQL的参数、优化数据类型

小草的博客 5329

离线安装vue脚手架,内网安装@vue/cli

公司开发环境使用内网,无法用外网,搭建环境的时候,发现内网系统没有安装vue脚手架,我搜了很多文章,发现他们的方法对我都不适用,然后就自己摸索,最终皇天不负有心人,终于被我安装上了,一下是我内网离线安装vue/cli的方法,希望能帮助到有需要的小伙伴! 因为npm被集成在nodejs中,而安装nodejs只需要把nodejs安装包copy到内网电脑安装就行,比较简单,这里就不多做演示。 在外网电脑上,使用npm install -g xxxx命令下载好我们所需要的各个安装包,比如: npm insta

Liberty_yes的博客 1万+

MySQL 优化 —— IS NULL 优化

引言 本博客翻译自 MySQL 官网:IS NULL Optimization, MySQL版本 5.7。 MySQL 对 IS NULL 的优化 MySQL 可以对 IS NULL 执行和常量等值判断(列名= 常量表达式,如name = 'Tom')相同的优化。MySQL 可以利用索引和范围来搜索空值。 例如: SELECT * FROM tbl_name WHERE key_co...

Morty的技术乐园 8471

SpringBoot 插件化开发详细总结

SpringBoot 插件化开发方案总结

congge 1万+

从零到一:ESP32与豆包大模型的RTC连续对话实现指南

文本实现ESP32S3 SparkBot与豆包大模型的RTC连续对话

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 4366

Mysql 优化的几种方法

MySQL优化是指通过调整MySQL的各项参数和配置,以及优化SQL语句的编写和执行,提高MySQL系统的性能和可用性。MySQL优化的主要目标是尽可能快地响应用户请求,提高系统的处理能力和并发性能,减少资源消耗和硬件成本。MySQL优化涉及多个方面,包括:1.硬件配置:包括CPU、内存、磁盘等硬件资源的选择和配置,以满足系统的负载和性能需求。2.软件配置:包括MySQL的参数设置和调整,如缓存大小、连接数、并发处理数等,以适应不同的负载和访问模式。

兴趣是最好的老师,勤能补拙 7102

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

MySQL 优化方案

MySQL 查询过程是指从客户端发送 SQL 语句到 MySQL 服务器,再到服务器返回结果集的整个过程。这个过程涉及多个组件的协作,包括连接管理、查询解析、优化、执行和结果返回等。索引是提高查询性能的核心手段,但需要合理使用。查询缓存(MySQL 8.0 之前)优化查询语句本身可以显著提升性能。使用 LIMIT 时避免高偏移量。合理使用 IN 和 EXISTS。使用 EXPLAIN 分析查询。避免 SELECT *

qq_33807380的博客 1072

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Mysql性能优化、Mysql参数优化、Mysql配置优化

Mysql性能优化、Mysql参数优化、Mysql配置优化Mysql参数优化对于不同的网站,及在线量等,以及机器硬件的配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能的得到最佳的效果为了测试我们创建一个test1的库创建一个tb1的表,然后导入2万行数据,脚本如下:?1234567891011121314151617181920212223242526#!/bin/bash  ...

破茧 2488

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

全面优化MySQL

MySQL性能瓶颈原因 硬件、系统因素 CPU 磁盘I/O 网络性能 操作系统争用 MySQL相关因素 数据库设计 索引、数据类型 应用程序性能 特定请求、短时事务 配置变量 缓冲区、高速缓存、InnoDB 瓶颈分析工具 sysstat工具集...

aohexi1719的博客 160

MySQL索引优化

这条语句,实际只有name会走索引,因为name是右侧模糊匹配,得到的结果是不确定的,name字段过滤完,得到的索引行里的age和position是无序的,无法很好的利用索引。而5.6引入索引下推后,上面的sql在获取到联合索引里匹配到名字是 ‘LiLei’ 开头的索引后,还会对age和position进行过滤,用过滤后剩下的索引对应的主键id再回表查整行数据。综上所述,对于order by的优化,尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。命令,查看rows字段的值。

西岭千秋雪的博客 1585

mysql十种优化,mysql的各种优化

mysql的各种优化mysql没索引与有索引的区别优点:当表中有大量记录时,若要对表进行查询,如果没用建立索引,搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;如果在表中针对一些字段建立了索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的...

weixin_39999781的博客 129

如何对mysql优化

MySQL 作为广泛使用的开源关系型数据库管理系统,其性能优化是保障应用高效运行的关键。无论是面对高并发访问的Web应用,还是处理大规模数据分析的系统,MySQL的性能调优都是不可或缺的一环。本文将介绍一系列MySQL优化策略与实践,帮助我们开发者和数据库管理员提升MySQL数据库的性能。

学习和分享 899

mysql 索引优化 null_MySQL 优化 —— IS NULL 优化

引言本博客翻译自 MySQL 官网:IS NULL Optimization, MySQL版本 5.7。MySQL 对 IS NULL 的优化MySQL 可以对 IS NULL 执行和常量等值判断(列名= 常量表达式,如name = 'Tom')相同的优化。MySQL 可以利用索引和范围来搜索空值。例如:SELECT * FROM tbl_name WHERE key_col IS NULL;S...

weixin_42477505的博客 663

MySQL —— 优化

概念 在应用的开发过程中,由于初期数据量小,开发人员写SQL语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的SQL语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化 MySQL优化方式有很多,大致可以从以下几点来优化MySQL: 从设计上优化 从查询上优化 从索引上优化 从存储上优化 查看SQL执行频率 MySQL客户端连接成功后,通过show [session|global] statu

weixin_46540606的博客 857

mysql 优化36_Mysql 优化建议

1、硬件层相关优化1.1、CPU相关在服务器的BIOS设置中,可调整下面的几个配置,目的是发挥CPU最大性能,或者避免经典的NUMA问题:1、选择Performance Per Watt Optimized(DAPC)模式,发挥CPU最大性能,跑DB这种通常需要高运算量的服务就不要考虑节电了;2、关闭C1E和C States等选项,目的也是为了提升CPU效率3、Memory Frequency(内...

weixin_30689519的博客 1718

mysql 语句如何优化

本文简要介绍了mysql 语句优化的9种方法和优化技巧。

m0_72958694的博客 1742

MySQL 数据优化

MySQL 的数据优化是一个全方位的工作,涵盖了数据库设计、索引使用、查询优化、缓存机制和硬件调优等方面。通过合理的数据库设计、正确使用索引、优化查询以及定期维护,可以显著提高 MySQL 数据库的性能和稳定性。在生产环境中,还应根据业务特点和数据规模,灵活运用这些优化技巧,确保数据库能够高效运行。

Flying_Fish_roe的博客 1497

mysql优化是什么_MySQL优化概述

一. MySQL优化要点MySQL优化是一门复杂的综合性技术,主要包括:1 表的设计合理化(符合 3NF,必要时允许数据冗余)2.1 SQL语句优化(以查询为主)2.2 适当添加索引(主键索引,唯一索引,普通索引(包括联合索引),全文索引)3 分表技术(水平分割,垂直分割)4 读写分离(写包括update/delete/insert)5 存储过程(模块化编程,提高执行速度)6 MySQL配置优化7...

weixin_35450313的博客 583
上一篇: OAuth 2.0 认证
下一篇: Java获取IP工具类
codeLife1993
博客等级 码龄8年 23粉丝 60原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值