MySql存储引擎和索引原理

5-MySQL原理-存储引擎与索引结构 索引是为了加速对表中数据行的检索而创建的一种分散存储的(不连续的)数据结构,硬盘级的。索引意义:索引能极大的减少存储引擎需要扫描的数据量,索引可以把随机IO变成顺序IO。索引可以帮助我们在进行分组、排序等操作时,避免使用临时表。正确的创建合适的索引是提升数据库查询性能的基础。索引是搜索引擎去实现的,在建立表的时候都会指定,搜索引擎是一种插拔式的,根据自己的选择去决定使用哪一个。 MyISAM存储引擎 MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址(叶节点data域)。主键索引(prim 阅读详情

转载 https://blog.youkuaiyun.com/tongdanping/article/details/79878302

注意:

   1、索引需要占用磁盘空间,因此在创建索引时要考虑到磁盘空间是否足够

   2、创建索引时需要对表加锁,因此实际操作中需要在业务空闲期间进行

MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,B+Tree索引,哈希索引,全文索引等等,

 

索引实现的原理:

     1.哈希索引:

         只有memory(内存)存储引擎支持哈希索引,哈希索引用索引列的计算该值的hashCode,然后在hashCode相应的位置存执

        该值所在行数据的物理位置,因为使用散列算法,所以访问速度非常快,但是一个值只能对应一个hashCode,

        而且是散列的分布方式,因次哈希索引不支持范围查找和排序的功能

    2.全文索引:

        仅用于MyISAM和InnoDB,针对较大的数据,生成全文索引非常消耗时间和控件,对于文本的大对象,如果使用普通索引,

         那么匹配文本前几个字符还是可行的,但是要匹配文本中间的几个单词,就要使用like,这样会需要很长的时间来执行

        (由于前面是模糊的,所以不能利用索引的顺序,必须一个个去找,看是否满足条件。这样会导致全索引扫描或者全表扫描)

         这个时候就需要使用全文索引,再生成全文索引时候,会为文本生成一份单词的清单,在索引时候根据这个单词的清单来索引

       全文索引的查询也有自己特殊的语法,而不能使用LIKE %查询字符串%的模糊查询语法

SELECT * FROM table_name MATCH(ft_index) AGAINST('查询字符串');

 3. BTree索引和B+ Tree索引 转载https://www.jianshu.com/p/0371c9569736

    叶子节点就是没有子节点的节点,非叶子节点就是有子节点的节点

   ① BTree索引 

   B树是一种多路自平衡搜索树,它类似普通的二叉树,但是B书允许每个节点有更多的子节点。B树示意图如下:

   

   B树的特点:
  (1)所有键值分布在整个树中
  (2)任何关键字出现且只出现在一个节点中
  (3)搜索有可能在非叶子节点结束
  (4)在关键字全集内做一次查找,性能逼近二分查找算法​

   为了提升效率,要尽量减少磁盘IO的次数。实际过程中,磁盘并不是每次严格按需读取,而是每次都会预读。

   磁盘读取完需要的数据后,会按顺序再多读一部分数据到内存中,这样做的理论依据是计算机科学中注明的局部性原理:

(1)由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间),
          因此对于具有局部性的程序来说,预读可以提高I/O效率.预读的长度一般为页(page)的整倍数。
(2)MySQL(默认使用InnoDB引擎),将记录按照页的方式进行管理,每页大小默认为16K(这个值可以修改)。

        linux 默认页大小为4K。

B-Tree借助计算机磁盘预读机制:

    每次新建节点的时候,都是申请一个页的空间,所以没查找一个节点只需要一次I/O;因为实际应用当中,节点深度会很少,

    所以查找效率很高.

​

  查找数字29:  原文:https://blog.youkuaiyun.com/endlu/article/details/51720299

   (1) 根据根结点指针找到文件目录的根磁盘块1,将其中的信息导入内存。【磁盘IO操作1次】

   (2) 此时内存中有两个文件名17,35和三个存储其他磁盘页面地址的数据。根据算法我们发现17<29<35,

      因此我们找到指针p2。

   (3) 根据p2指针,我们定位到磁盘块3,并将其中的信息导入内存。【磁盘IO操作2次】

   (4) 此时内存中有两个文件名26,30和三个存储其他磁盘页面地址的数据。根据算法我们发现26<29<30,

         因此我们找到指针p2。

   (5) 根据p2指针,我们定位到磁盘块8,并将其中的信息导入内存。【磁盘IO操作3次】

   (6) 此时内存中有两个文件名28,29。根据算法我们查找到文件29,并定位了该文件内存的磁盘地址。

 

从图中也可以看到,B+树与B树的不同在于:
(1)所有关键字存储在叶子节点,非叶子节点不存储真正的data
(2)为所有叶子节点增加了一个链指针

 

为什么mysql的索引使用B+树而不是B树呢??

(1)B+树更适合外部存储(一般指磁盘存储),由于内节点(非叶子节点)不存储data,所以一个节点可以存储更多的内节点,每个节点能索引的范围更大更精确。也就是说使用B+树单次磁盘IO的信息量相比较B树更大,IO效率更高。
(2)mysql是关系型数据库,经常会按照区间来访问某个索引列,B+树的叶子节点间按顺序建立了链指针,加强了区间访问性,所以B+树对索引列上的区间范围查询很友好。而B树每个节点的key和data在一起,无法进行区间查找。

 

聚集索引

InnoDB存储引擎表是索引组织表,即数据按照主键顺序存放。而聚集索引就是按照每张表的主键构造一棵B+树,同时叶子节点存放的是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。索引聚集索引可以在B+树索引的叶子节点上直接找到数据。由于定义了数据的逻辑顺序,聚集索引能够特别快的访问针对范围值的查询。

辅助索引

对于辅助索引,叶子节点并不包含的是行记录的全部数据。叶子节点除了包含键值之外,每个叶子结点的索引行中还包含了一个书签。这个书签就是相对应行数据的聚集索引键。

辅助索引的存在不会影响数据在聚集索引中的组织,因此每张表可以有多个辅助索引。

 

联合索引

联合索引是指对表上的多个列进行索引。

例

create tablebuy_log (

         user_id int Unsigned not null,

         num int,

         buy_date Date

)

//创建两个索引:user_id,user_id_2

Alter table buy_log add key(user_id);   //user_id

Alter table buy_log add (user_id,num,buy_date)  //userid_2

 

1、select * from buy_log where user_id=2;,经过EXPLAIN分析会使用user_id索引,因为该辅助索引叶子节点包含单个键值,理论上一个页能存放更多的记录

2、select * from buy_log where user_id =1 and num=2 order by buy_date Desc limit 3,经过EXPLAIN分析会使用(user_id,num,buy_date)联合索引user_id_2,因为联合索引已经对buy_date排好序了,不要再对buy_date做一次额外的排序了。如果强制索引索引userid,经过分析,会做一次排序操作Useing filesort,即对buy_date排序,因为userid索引中的buy_date是无序的

 3、select * from buy_log where user_id =1 order by buy_date Desc limit 3,经过EXPLAIN分析会使用user_id索引,不会使用联合索引,并进行一次排序操作,因为(user_id,buy_date)是无序的(虽然存在两个索引都可以用的情况,但是sql优化器选择了user_id,因为该索引只包含一个键值,理论上一个页能存放更多的记录)

 

优化器选择不适用索引

 即不使用索引去查找数据,而是通过扫描聚集索引,即直接进行全表的扫描得到数据。这种情况多发生于范围查找,join链接等情况.下面通过订单表举例说明一下:

select * from order_details where order_id > 10000 and order_id<102000;

  该表有1个联合索引(order_id,product_id),还有1个单个索引(order_id)

 即查找订单号大于10000小于102000的订单详情,,上面这句话显然可以通过索引(order_id)进行数据的查找,但是经过EXPLAIN分析,优化器并没有选择order_id索引查数据,而是选择了primary聚集索引,也就是表扫描。因为用户选择的数据是整行数据,辅助索引不能覆盖我们要查询的信息,因为对orderorder_idid索引查询到指定数据后,还需要进行一次书签访问来查找整行数据信息。虽然order_id索引中的数据是顺序存放的,但是再一次书签查找的数据是无序的了,因此变为了磁盘上的离散读操作。如果访问的数据量很少(20%左右),优化器还是会选择聚集索引来查找数据的。因为顺序读远远快于离散度

  不能进行索引覆盖的情况下,优化器选择辅助索引的情况为:通过辅助索引查找的数据是少量的,但是如果磁盘是固态磁盘,随机读操作很快,并且确认辅助索引可带来更好的性能,可使用关键字FORCE INDEX来强制使用某个索引

 

8、其他不使用索引的情况

  1. Like的参数以通配符开头时   like '%你好%'
  2.  使用!= 或 <> 操作符时
  3. 索引列参与计算
  4. 使用is not null
  5. 使用or来连接条件

 

MySql存储引擎 转载 https://blog.youkuaiyun.com/qq_34417408/article/details/80957620

  (1):MyISAM存储引擎

       不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用

        基本上可以用这个引擎来创建表

 (2)InnoDB存储引擎*

   该存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM引擎,写的处理效率会差一些,

   并且会占用更多的磁盘空间以保留数据和索引。
   InnoDB存储引擎的特点:支持自动增长列,支持外键约束

  (3):MEMORY存储引擎

    Memory存储引擎使用存在于内存中的内容来创建表。每个memory表只实际对应一个磁盘文件,格式是.frm。memory类型的

   表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。
   MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引,两种不同类型的索引有其不同的使用范围

(4)MERGE存储引擎

    Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,

    对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。

MySQL第二讲:MySQL innoDB存储引擎中索引原理 本文是MySQL的第二讲:==MySQL索引原理==。本文从数据结构的角度切入数据库中常见的B+ 树索引和哈希索引的使用,并从内部机制上讨论了使用上述索引的环境和优化方法,以及 innoDB1.2 版本开始支持的全文索引。 阅读详情

相关推荐

别再死磕U-Net了!用PyTorch手把手教你搭建ResUnet,搞定医学图像分割(附完整代码)

本文详细介绍了如何利用PyTorch搭建ResUnet模型,通过引入残差连接解决医学图像分割中的梯度消失、特征退化和细节丢失问题。与传统U-Net相比,ResUnet在Dice系数和收敛速度上均有显著提升,特别适合处理脑部MRI等复杂医学图像。文章还提供了完整的代码实现和关键训练技巧,帮助开发者快速掌握这一先进技术。

weixin_42552637的博客 326

深入理解MySQLⅠ -- 存储引擎与索引

本文涉及存储引擎、索引,这两点也是面试非常爱考的点。

十八岁讨厌编程的博客 1100

Java + Selenium + TestNg + Allure Web UI 自动化

我们知道,在Python中针对Web UI自动化有Python + Selenium + Pytest/Unittest +Allure的技术栈。那么对于Java而言,也有其独特的Web UI 自动化技术栈。相同的,我们同样的运用Selenium框架,测试报告同样运用Allure。不同的是,我们运用的语言由Python转化为了Java,测试用例管理框架从Pytest转化为了TestNG。

qq_45594960的博客 1911

mysql为什么要使用B+树实现索引?

关于这个问题,我们首先要弄明白两个问题:什么是索引?什么是B+树? 1、什么是索引? 索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。 索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在[1,2,3,4]中找到4这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。 索引在mysql数据库中分三类: B+树索引、Hash索引、全文索引 今天要介绍的是工作开发中最常接触到innodb存储引擎中的的B+树索引。 2、什么是B+树? B+

zsyoung的博客 459

避开新手第一个坑:手把手教你正确安装Perforce服务器与客户端(P4d/P4V)

本文详细指导如何正确安装和配置Perforce服务器与客户端(P4d/P4V),避免新手常见的安装顺序错误。从环境准备到分步安装,再到常见问题排查和性能优化,帮助开发者快速搭建稳定的版本控制环境,提升团队协作效率。

weixin_26804345的博客 656

Vivado与Vscode无缝集成:高效Verilog开发环境搭建指南

本文详细介绍了如何将Vivado与Vscode无缝集成,打造高效的Verilog开发环境。通过替换Vivado默认编辑器为Vscode,配置必备插件和语法检查工具,开发者可以大幅提升FPGA项目的编码效率。文章还提供了代码片段、Testbench自动生成等高级技巧,帮助开发者快速上手这一集成方案。

weixin_33737774的博客 493

MySQL索引原理

一. 什么是索引 索引是帮助MySQL高效查询和检索数据的排好序的数据结构,索引的数据结构包括:二叉树、红黑树、Hash树、B-Tree树 二. 索引的优缺点 优点: 1. 加快查询和检索数据的速度 2. 唯一索引可以保证数据库中一行数据的唯一性 缺点: 1. 维护索引需要消失时间,对数据增删改时,数据有索引,索引也需要改,降低sql效率 2. 索引需要物理文件存储,消耗磁盘空间 使用索引一定能提高查询性能吗? 大多数情况下,索引查询都是比全表扫描要快的。但是如果数据库的数据量不大,那么使

MDWJJ的博客 1813

核磁干货 | RESTplus实战:静息态fMRI预处理全流程解析

本文详细解析了使用RESTplus工具包进行静息态fMRI数据预处理的完整流程,包括数据准备、环境配置、预处理步骤及高级分析技巧。RESTplus作为基于SPM的批处理工具,以其图形化界面和智能化参数设置显著提升了核磁静息态数据分析的效率,特别适合新手和临床研究人员。文章还分享了实战中的常见问题解决方案和性能优化技巧。

wine的专栏 880

MySQL 全文索引详解:从原理到实战,一文搞懂!

MySQL全文索引为文本搜索提供了比普通索引更高效的模糊匹配能力,其核心区别在于数据结构(倒排索引)和查询方式(MATCH...AGAINST)。使用要点包括:创建全文索引需指定TEXT/VARCHAR字段;支持布尔模式、相关性评分等高级功能;但存在停用词过滤、最小词长限制等机制。值得注意的是,中文处理需启用ngram分词器,且复杂场景建议搭配Elasticsearch。全文索引适合英文内容检索,但对中文支持有限,需权衡使用场景和性能需求。

程序员极光 2125

MySQL根据idb文件恢复数据

恢复前提 MySQL 5.* 和 8.* 的恢复方式大同小异,最基本的区别是8.* 中,不再有表结构frm文件,所以要恢复 8.* 的数据,就必须要有完整的建表语句。 而恢复 5.* 的数据,就需要idb文件和 frm文件,当然,如果有完整的建表语句的话,不用frm文件也行。 恢复步骤 需要注意的是,以下操作需要选定数据库后执行。 5.* 恢复表结构 确定表列数 首先创建一张 与需要恢复数据的表 的名字相同的新表,如果已知原表的字段数量的话,就按照原表字段数建表,字段名和类型都不用考虑,如果不知道数量的话,

weixin_45121446的博客 5447

人工智能训练师三级补贴3120元申领全攻略|条件+流程+五省市对比

补贴是真的,但不是"白给"的。你需要满足社保、户籍、时间等条件,严格按照流程操作。记住四件事先确认自己是否满足条件,再报名——别考完了才发现领不到紧缺工种补贴更高——确认你所在城市是否在紧缺目录中证书下发后12个月内申请——设个日历提醒材料准备齐全再提交——避免来回折腾如果你正在考虑考人工智能训练师三级证书,想要从报名到备考到拿证到申领补贴的完整一站式指南,欢迎查看我的付费专栏:📖《人工智能训练师三级·从零到拿证完全指南》80篇系统化内容,覆盖报名、备考、冲刺、拿证全流程。

白话机器学习 1519

MySQL 索引原理

MySQL索引深入剖析

杨宇昌的博客 1万+

Redhawk:toggle rate从哪来?

redhwak中toggle rate的相关设置

m0_61544122的博客 8108

MySQL执行原理、存储引擎、索引模型简介

数据库存储引擎是数据库底层软件组织,数据库管理管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。MySQL的核心就是存储引擎。mysql底层设计采用可插拔式的存储引擎,用户根据需求,选择或自定义存储引擎mysql5.5之后默认存储引擎为innodb1、查看mysql可支持的存储引擎2、各种存储引擎对比innoDBmysql5.5默认的存储引擎,事务型数据库。

u012002125的博客 1181

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

MySQL 存储引擎和索引结构原理详解(三)

MySQL 支持多种存储引擎,每种存储引擎在数据存储、事务处理、索引实现等方面有所不同。

u014730578的博客 629

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

MySQL——Innodb存储引擎的索引原理详细解读

0 前言 回想大二上数据库应用,老师在讲索引的时候,是像下面这么说的 索引就像一本书的目录。而当用户通过索引查找数据时,就好比用户通过目录查询某章节的某个知识点。这样就帮助用户有效地提高了查找速度。所以,使用索引可以有效地提高数据库系统的整体性能。 索引的优缺点 优势:可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序; 劣势:索引本身也是表,因此会占用存储空间,...

weixin_41438466的博客 530

深度学习工具包 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的存储引擎,常用的有三种: InnoDB、MyISAM、 MEMORY。 三种储存引擎的特点和选择 MyISAM 特点:不支持事务和外键操作。读取速度快,节约资源。 使用场景:以查询操作为主,只有很少的更新和删除操作,对事务的完整性、并发性要求不是很高! InnoDB 特点: MySQL的默认存储引擎,支持事务和外键操作。 使用场景:对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,读写频繁的操作! MEMORY 特点:将所有数据保存在内存中,在需要快速定位记

учёба 608

MySQL之存储引擎和索引原理

mysql存储引擎存储引擎MyISAM 和 InnoDB 存储引擎 百度百科 MyISAM 和 InnoDB 使用MyISAM存储引擎,创建account 账号表, CREATE TABLE `account` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL DEFAULT '', `passwod` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`

yangyanping20108的博客 386

一文理解MySQL存储引擎、索引、事务及锁原理

1、MySQL中的存储引擎 1.1、什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 ​ 现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存表格用excel,存图片用png等。数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。即数据存放、管理的方式。 ​ 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存

FMFLV的博客 1249

专业技能(挖坑填坑)——MYSQL的索引、日志、事务、存储引擎、锁机制等相关原理

MySQL的使用,以及MySQL的索引、日志、事务、存储引擎、锁机制等相关原理。 MySQL8中优化方式 如何实现一个高并发的系统

weixin_44040169的博客 1176

MySql -- 核心原理(存储引擎、MVCC、锁、索引)

MySQL中的数据用各种不下同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎。隔离级别脏读不可重复读幻读读未提交√√√读已提交×√√可重复读××√串行化×××MVCC,即Multi-Version Concurrency Control (多版本并发控制)。它是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。

qq_37233070的博客 1346

MySQL 5.7 索引原理 和 存储引擎 及 NULL 和 空值问题

存储引擎是第三方提供的,可插拔式的插件。索引机制也便是有插拔式的存储引擎进行实现。 索引是什么 索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构 为什么选择的是B+ 二叉查找树 Binary Search Tree 可以看出当我们插入一个有序的数值时,树的深度就比较长(右子节点),时间复杂度比较差O(n) 平衡二叉查找树 AVL Trees 平衡二叉树又叫相对平衡树,高度差不会超过1 该方式在一定程度上解决了顺序插入时,树的深度的问题, 但是当数据量比较大的时候,这种问题也是会存在的。

孤傲然的博客 1392

滴滴面试总结之MySQL存储引擎以及索引原理

一、MySQL存储引擎:MySQL将数据用各种不同的技术存储在文件中,这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。这些不同的技术以及配套的相关功能在 mysql中被称作存储引擎(也称作表类型)。建表时,选择合适的存储引擎很重要,如果到后期再更换将会很麻烦。存储引擎是基于表的,而非数据库。         个人理解:存储引擎是某张表存储数据、如

Juwenzhe_HEBUT的博客 1500

整理:熟悉MySQL的使用和运行原理,掌握索引、事务、锁等机制。了解存储引擎、读写分离、分库分表。

索引是数据库中一种用于提高查询速度的数据结构。它可以加速数据的查找过程,类似于书籍中的目录,可以快速找到目标数据。

buyaotutou的博客 1365

MySQL 索引知识大梳理:底层原理、分类及存储引擎差异全解析

MySQL索引详解:提升查询性能的关键技术 摘要:MySQL索引主要分为顺序访问和索引访问两种方式。索引通过特殊数据结构(B+Tree或哈希)快速定位数据,显著提高查询效率。B+Tree索引因其稳定的查询性能、高效的范围查询和低IO消耗成为MySQL首选。索引类型包括普通索引、唯一索引、主键索引和全文索引,按存储方式可分为聚簇索引(InnoDB主键索引)和非聚簇索引。InnoDB与MyISAM在索引实现上存在差异:InnoDB采用聚簇索引存储数据,辅助索引需回表查询;MyISAM所有索引均为非聚簇索引。合理

2301_80008738的博客 901
上一篇: 定位jvm内存溢出
下一篇: 各种算法简介
辛一一
博客等级 码龄10年 125粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值