7、Mysql高级特性

构建现代Java Web开发环境:JDK7, Tomcat7, MySQL, Eclipse, Maven Eclipse作为一个流行的开源集成开发环境(IDE),其功能强大且具有高度的可定制性。在本小节中,我们将深入介绍Eclipse的用户界面和如何安装插件来增强开发功能。Eclipse的界面布局可自由调整,包含以下几个关键部分:菜单栏、工具栏、编辑器区域、导航栏、控制台输出区和包资源管理器视图。初次安装Eclipse后,用户可以根据个人喜好调整这些视图的布局。 阅读详情

分区表

分区表是一个独立的逻辑表,但是底层由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装。对分区表的请求,都会通过句柄对象转化成对存储引擎的接口调用。
Mysql实现分区表的方式是对底层表的封装,意味着索引也是按照分区的子表定义的,而没有全局索引。
Mysql在创建表时使用 PARTITION BY 子句定义每个分区存放的数据,在执行查询的时候,优化器会根据分区定义过滤那些没有我们需要数据的分区,这样查询就无须扫描所有分区。
分区的一个主要目的是将数据按照一个较粗的粒度分在不同的表中。
在下面的场景中,分区会起到很大的作用:

  - 表非常大以至于无法全部放在内存中,或者只在表的最后部分有热点数据,其他均是历史数据。
  - 分区表的数据更容易维护。
  - 分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备。
  - 可以使用分区表来避免某些特殊的瓶颈。
  - 如果需要还可以备份和恢复独立的分区,这在非常大的数据集的场景下效果非常好。

分区表本身也有一些限制:

  - 一个表最多只能有1024个分区。
  - 在Mysql5.1中分区表达式必须是整数,或者是返回整数的表达式。在Mysql5.5中,某些场景下可以直接使用列来进行分区。
  - 如果分区字段中有主键或者唯一索引的列,那么所有主键列和唯一索引列都必须包含进行。
  - 分区表中无法使用外键约束。

分区表的原理

SELECT 查询

当查询一个分区表的时候,分区层先打开并锁住所有的底层表,优化器先判断是否可以过滤部分分区,然后再调用对应的存储引擎接口访问各个分区的数据。

INSERT 操作

当写入一条记录时,分区层先打开并锁住所有的底层表,然后确定哪个分区表接收这条记录,再将记录写入对应底层表。

DELETE 操作

当删除一条记录时,分区层先打开并锁住所有的底层表,然后确定数据对应的分区,最后对相应底层表进行删除操作。

UPDATE 操作

当更新一条记录时,分区层先打开并锁住所有的底层表,Mysql先确定需要更新的记录在哪个分区,然后取出数据并更新,在判断更新后的数据应该放在哪个分区,最后底层表进行写入操作,并对原数据所在的底层表进行删除操作。

虽然每个操作都会先打开并锁住所有的底层表,但这并不是说分区表在处理过程中是锁住全表的。如果存储引擎能够自己实现行锁,则会在分区层释放对应表锁。

分区表的类型

Mysql支持多种分区表,最多的是根据范围进行分区,每个分区存储落在某个范围的记录。分区表达式可以是列,也可以是包含列的表达式。

CREATE TABLE sales (
	order_date DATETIME NOT NULL,
  name VARCHAR NULL DEFAULT ''
) ENGINE=InnoDB PARTITION BY RANGE(YEAR(order_date)) (
    PARTITION p_2021 VALUES LESS THAN (2021),
  	PARTITION p_2022 VALUES LESS THAN (2022),
  	PARTITION p_2023 VALUES LESS THAN (2023),
    PARTITION p_catchall VALUES LESS THAN MAXVALUE
);

PARTITION 分区子句中可以使用各种函数,但有一个要求表达式返回的值要是一个确定的整数,且不能是一个常数。

如何使用分区表

我们可以将分区当做索引的最初形态,以代价非常小的方式定位到需要的数据在哪一片区域。在这片区域中可以做顺序扫描,可以建索引,还可以将数据缓存到内存等等。因为分区无须额外的数据结构记录每个分区有哪些数据,所以代价非常低,只需要一个简单的表达式就可以表达每个分区存放的是什么数据。
为了保证大数据量的可扩展性,一般有两个策略:

  - 全量扫描数据,不要任何索引
  - 索引数据,并分离热点

什么情况下会出问题

  • NULL值会使分区过滤无效
  • 分区列和索引列不匹配
  • 选择分区的成本可能很高
  • 打开并锁住所有底层表的成本可能很高
  • 维护分区的成本可能很高

并且分区实现中也有一些其他限制:

  - 所有分区都必须使用相同的存储引擎
  - 分区函数中可以使用的函数和表达式也有一些限制
  - 某些存储引擎不支持分区
  - 对于MyISAM的分区表,不能再使用 LOAD INDEX INTO CACHE 操作
  - 对于MyISAM表,使用分区表时需要打开更多的文件描述符

查询优化

分区最大的优点就是优化器可以根据分区函数来过滤一些分区,根据粗粒度索引的优势,通过分区来过滤通常可以让查询扫描更少的数据。

合并表

合并表时一种早期的、简单的分区实现,和分区表相比有一些不同的限制,并且缺乏优化。分区表严格来说是一个逻辑上的概念,用户无法访问底层的各个分区。但是合并表允许用户单独访问各个子表。分区表和优化器的结合更紧密,这也是未来发展的趋势,而合并表则是一种将淘汰的技术。

视图

视图本身是一个虚拟表,不存放任何数据。在使用SQL语句访问视图的时候,他返回的数据是Mysql从其他表中生成的。视图和表是在同一个命名空间。

可更新视图

可更新的视图是指可以通过更新这个视图来更新视图涉及的相关表。只要指定了合适的条件,就可以更新、删除甚至向视图中写入数据。如果视图中定义了包含 GROUP BY 、UNION、聚合函数,以及其他一些特殊情况,就不能被更新了。更新视图的查询也可以是一个关联语句,但是有一个限制,被更新的列必须来自同一个表。

视图对性能的影响

视图可以和其他提升性能的方式叠加使用。例如在重构schema的时候可以使用视图,使得在修改视图底层表结构的时候,应用代码还能继续不报错的运行。

视图的限制

  • Mysql不支持物化视图
  • Mysql不支持在视图中创建索引

外键约束

InnoDB是目前Mysql中唯一支持外键的内置存储引擎。
使用外键是有成本的。比如外键通常都要求每次修改数据时都要在另外一张表中多执行一次查找操作。虽然InnoDB强制外键使用索引,但还是无法消除这种约束检查的开销。如果外键列的选择性很低,则会导致一个非常大且选择性很低的索引。

在Mysql内部存储代码

Mysql允许通过触发器、存储过程、函数的形式来存储代码。
Mysql中使用存储代码的优点:

  - 在服务器内部执行,离数据最近,另外在服务器上执行还可以节省带宽和网络延迟。
  - 这是一种代码重用。
  - 可以简化代码的维护和版本更新。
  - 可以帮助提升安全,比如提供更细粒度的权限控制。
  - 服务端可以缓存存储过程的执行计划,这对于需要反复调用的过程,会大大降低消耗。
  - 因为是在服务器端部署,所以备份、维护都可以在服务器端完成。
  - 可以在应用开发和数据库开发人员之间更好地分工。

Mysql中使用存储代码的缺点:

  - Mysql本身没有提供好用的开发和调试工具。
  - 较之应用程序的代码,存储代码效率要稍微差些。
  - 存储代码可能会给应用程序代码的部署带来额外的复杂性。
  - 因为存储代码都是部署在服务器内,所以可能有安全隐患。
  - 存储过程会给数据库服务器增加额外的压力。
  - Mysql并没有什么选项可以控制存储程序的资源消耗,所以在存储过程中一个小错误都可能直接把服务器拖死。
  - 存储代码在Mysql中的实现也有很多限制。
  - 调试Mysql的存储过程比较困难。

存储过程和函数

Mysql的架构本身和优化器的特性使得存储代码有一些天然的限制:
优化器无法使用关键字 DETERMINISTIC 来优化单个查询中多次调用存储函数的情况。
优化器无法评估存储函数的执行成本。
每个连接都有独立的存储过程的执行计划缓存。如果有多个连接需要调用同一个存储过程,将会浪费缓存空间来反复缓存同样的执行计划。
存储程序和复制时一张诡异组合。

触发器

触发器可以让我们在执行 INSERT、UPDATE 或者 DELETE 的时候,执行一些特地的操作。可以在Mysql中指定是在SQL语句执行前触发还是在执行后触发。触发器本身没有返回值,不过他们可以读取或者改变触发SQL语句所影响的数据。因为触发器可以减少客户端和服务端之间的通信,所以触发器可以简化应用逻辑,还可以提高性能。

事件

事件是Mysql5.1引入的一种新的存储代码的方式。我们可以创建一个事件,指定Mysql在某个时刻执行一段SQL代码,或者每隔一个时间间隔执行一段SQL代码。

在存储过程中保留注释

游标

Mysql在服务器端提供只读的、单向的游标,而且只能子存储过程或者更底层的客户端API中使用。因为Mysql游标中指向的对象都是存储在临时表中而不是实际查询到的数据,所以Mysql游标总是只读的。

绑定变量

Mysql使用绑定变量能够高效执行大量重复语句的原因:

  - 在服务器端只需要解析一次SQL语句。
  - 在服务器端某些优化器的工作只需要执行一次。
  - 以二进制的方式只发送参数和句柄。
  - 仅仅需要发送参数到服务器端,所以网络开销会很小。
  - Mysql在存储参数的时候,直接将其存放到缓存中,不再需要再内存中多次复制。

绑定变量的优化

对使用绑定变量的SQL,Mysql能够缓存其部分执行计划,如果某些执行计划需要根据传入的参数来计算的话,Mysql就无法缓存这部分的执行计划。

SQL接口的绑定变量

绑定变量的限制

  • 绑定变量是session级别的,所以连接之间不能共享变量。
  • Mysql5.1之前绑定变量的SQL是不能使用查询缓存的。

字符集和校对

字符集是指一种从二进制编码到某类字符符号的映射。每一类编码字符都有其对应的字符集和校对规则。

Mysql如何使用字符集

每种字符集都可能有多种校对规则,并且都有一个默认的校对规则。每个校对规则都是针对某个特定的字符集的,和其他的字符集没有关系。校对规则和字符集总是一起使用的。
Mysql的设置可以分为两类:创建对象时的默认值、在服务器和客户端通信时的设置。

创建对象时的默认设置

Mysql服务器有默认的字符集和校对规则,每个数据库也有自己的默认值,每个表也有自己的默认值。在这个“阶梯”的每一层,都可以指定一个特定的字符集或者让服务器使用他的默认值:

  - 创建数据库的时候,将根据服务器上的 character_set_server 设置来设定数据库的默认字符集
  - 创建表的时候,将根据数据库的字符集设置指定表的默认字符集。
  - 创建列的时候,将根据表的设置指定列的默认字符集。

服务器和客户端通信时的设置

当服务器和客户端通信的时候,他们可能使用不同的字符集,这是服务器端需要进行必要的翻译转换工作:
服务器端总是假设客户端是按照 character_set_client 设置的字符集来传输数据和SQL语句的。
当服务器收到客户端的SQL语句时,先将其转换成字符集 character_set_connection 。
当服务器端返回数据或者错误信息给客户端时,他会将其转换成 character_set_result。

Mysql如何比较两个字符串的大小

如果比较的两个字符串的字符集不同,Mysql会先将其转换成同一个字符集再进行比较。

选择字符集和校对规则

对于校对规则的选择通常需要考虑一个问题,是否以大小写敏感的方式比较字符串, 或者是以字符串编码的二进制值来比较大小。

字符集和校对规则如何影响查询

某些字符集和校对规则可能会需要更多的CPU操作,可能会消耗更多的内存和存储空间,甚至还会影响索引的正常使用。

全文索引

通过数值比较、范围过滤等就可以完成绝大多数我们需要的查询了。但是,如果希望通过关键字匹配来进行查询过滤,那么就需要基于相似度的查询了,全文索引就是为这种场景设计。
全文索引可以支持各种字符内容的搜索包括CHAR、VARCHAR 和 TEXT ,也支持自然语言搜索和布尔搜索。
MyISAM对全文索引的支持有很多的限制,例如表级锁对性能的影响、数据文件的崩溃、崩溃后的恢复等等,这使得MyISAM的全文索引对于很多应用场景并不合适。

自然语言的全文索引

自然语言搜索引擎将计算每个文档对象和查询的相关度。相关度是基于匹配的关键词个数,以及关键词在文档中出现的次数。在整个索引中出现次数越少的词语,匹配时的相关度就越高。

分布式(XA)事务

存储引擎的事务特性能够保证在存储引擎级别实现ACID,而分布式事务则让存储引擎级别的ACID可以扩展到数据库层面,甚至可以扩展到多个数据库之间。这需要两阶段提交实现。
XA事务中需要有一个事务协调器来保证所有的事务参与者都完成了准备工作。如果协调器收到所有的参与者都准备好的消息,就会告诉所有的事务可以提交了。Mysql在XA事务中扮演一个参与者的角色,而不是协调者。

内部XA事务

Mysql本身的插件式架构导致在其内部需要使用XA事务。Mysql中各个存储引擎是完全独立的,所以一个跨存储引擎的事务就需要一个外部的协调者。

外部XA事务

Mysql能够作为参与者完成一个外部的分布式事务,但他对XA协议支持并不完整,例如,XA协议要求在一个事务中的多个连接可以做关联。

查询缓存

Mysql查询缓存保存查询返回的完整结果。当查询命中该缓存,Mysql会立刻返回结果,跳过了解析、优化和执行阶段。
查询缓存系统会跟踪查询中涉及的每个表,如果这些表发生变化,那么和这个表相关的所有的缓存数据都将失效。这种机制效率看起来比较低,因为数据表变化时很有可能对应的查询结果并没有变更。

Mysql如何判断缓存命中

Mysql判断缓存命中的方法很简单:缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包括了如下因素,即查询本身、当前要查询的数据库、客户端协议的版本等一些其他可能会影响返回结果的信息。
当判断缓存是否命中时,Mysql不会解析或者参数化查询语句,而是直接使用SQL语句和客户端发生过来的其他原始信息。任何字符上的不同,例如空格、注释等任何的不同都会导致缓存的不命中。

查询缓存如何使用内存

查询缓存是完全存储在内存中的,所以在配置和使用他之前,我们需要先了解他是如何使用内存的。除了查询结果之外,需要缓存的还有很多别的维护相关的数据。

什么情况下查询缓存能发挥作用

并不是什么情况下查询缓存都会提高系统性能。缓存和失效都会带来额外的消耗,所以只有当缓存带来的资源节约大于其本身的资源消耗时才会给系统带来性能提升。

如何配置和维护查询缓存

一旦理解查询缓存工作的原理,配置起来就容易多了。
query_cache_type:是否打开查询缓存,可以设置成OFF、ON或DEMAND。DEMAND表示只有在查询语句中明确写明SQL_CACHE的语句才放入查询缓存。
query_cache_size:查询缓存使用的总内存空间。
query_cache_min_res_unit:在查询缓存中分配内存块时的最小单位。
query_cache_limit:Mysql能够缓存的最大查询结果。如果查询结果大于这个值则不会被缓存。
query_cache_wlock_invalidate:如果某个数据表被其他连接锁住,是否仍然从查询缓存中返回结果。

通用查询缓存优化

  • 用多个小表代替一个大表对查询缓存有好处。
  • 批量写入时只需要做一次缓存失效,所以相比单条写入效率高。
  • 因为缓存空间太大,在过期操作的时候可能会导致服务器僵死。一个简单的解决办法就是控制缓存空间的大小,或者直接禁用查询缓存。
  • 无法再数据库或者表级别控制查询缓存,但是可以通过 SQL_CACHE 和 SQL_NO_CACHE 来控制某个 SELECT 语句是否需要进行缓存。
  • 对于写密集型的应用来说,直接禁用查询缓存可能会提高系统的性能。
  • 因为对互斥信号量的竞争,有时直接关闭查询缓存对读密集型的应用也会有好处。
MySQL 5.7 for CentOS 7:完整安装与配置指南 MySQL 5.7.33版本作为关系型数据库管理系统的重要更新,它在性能、安全性和可扩展性方面都做出了显著的提升。其中,最引人注目的是其对JSON数据类型的支持,这使得处理半结构化数据变得更为高效。在性能方面,MySQL 5.7.33通过改进的优化器和增强的并发控制机制,显著提高了查询响应时间,特别是在高并发的场景下表现尤为出色。安全性方面,5.7版本加强了认证机制,并引入了新的加密技术,为数据安全提供了更坚固的防线。 阅读详情

相关推荐

MySQL分区表的局限和限制详解

禁止构建 分区表达式不支持以下几种构建: 存储过程,存储函数,UDFS或者插件 声明变量或者用户变量 可以参考分区不支持的SQL函数 算术和逻辑运算符 分区表达式支持+,-,*算术运算,但是不支持DIV和/运算(还存在,可以查看Bug #30188, Bug #33182)。但是,结果必须是整形或者NULL(线性分区键除外,想了解更多信息,可以查看分区类型)。 分区表达式不支持位运算:|,&,^,<<,>>,~ . HANDLER语句 在MySQL 5.7.1之前的分区表不支持HANDLER语句,以后的版本取消了这一限制。 服务器SQL模式 如果要用用户自定义分区的表的话,需要注意的是

mysql分区表 缓存_Mysql 分区表-分区操作

一、查看MySQL是否支持分区1、MySQL5.6以及之前版本show variables like '%partition%';2、MySQL5.7show plugins;二、分区表的分类与限制1、分区表分类RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。HASH分区:...

weixin_32010647的博客 2863

库卡机器人外部轴配置全流程:从接线到WorkVisual 6.0实战(附避坑指南)

本文详细解析了库卡机器人外部轴配置的全流程,涵盖从硬件接线到WorkVisual 6.0软件配置的实战步骤。重点介绍了KPP驱动模块连接、电机参数匹配、安全配置激活及零点标定等关键环节,并提供了实用的避坑指南,旨在帮助工程师高效、安全地完成外部轴集成,提升工作站柔性。

weixin_29161785的博客 496

MYSQL分表与分区

什么是分表分区分表分区的区别实现方式上数据处理上提高性能上实现的难易度上mysql分表和分区的联系如何分区概述分区技术支持分区类型及举例注意应用场景示例订单表比预想中扩张速度快坑爹的日志表每半月一个分区,自动维护备注RDS for MySQL 对表分区的限制RDS是否需要自己做分表、读写分离RDS MySQL的单表尺寸限制 PS:分库能够突破单机瓶颈 什么是分表分区 分表 ...

weixin_34194379的博客 2564

组态王|组态王通过选择日期实现历史数据的查询

②在弹出的【插入通用控件】对话框选择【Calender Control】控件,然后点击【确定】按钮,关闭对话框,然后在画面上适当的位置按住鼠标左键并拖动,绘制出一个矩形框,放开鼠标,就完成了控件的绘制。此函数将指定的时间格式(年,月,日,时,分,秒)转换为以秒为单位的长整型数,转换的时间基准是UTC(格林尼治)1970年1月1日00:00:00。实现内容,通过两个日历控件选择开始日期和结束日期,然后点击【历史数据查询】按钮,在报表中显示对应时间段的数据集。另外你用过哪些组态软件?

做有价值的事,积累有价值的笔记! 4561

服务器卡死排查实战:从现象分类到根因定位的完整手册

服务器卡死是运维中最令人头疼的故障之一,从游戏圈吐槽的“土豆服务器”到生产环境中的Linux系统无响应、rsync复制挂起,本质都是系统或进程失去正常响应能力。其原理通常涉及CPU、内存、磁盘IO或网络资源耗尽,以及内核和驱动异常。掌握系统化的排查方法,能够帮助工程师快速定位根因、缩短故障时间,避免盲目重启。本文从资源、层级、场景等多维度分类,结合top、dmesg、strace等工具,梳理一套从现象确认、指标收集、日志分析到进程定位的实战排查流程,并覆盖常见高频场景与预防治理建议。无论你是运维新手还是老手

weixin_33851177的博客 374

mysql缓存6_mysql 查询缓存

查询缓存很多数据库产品能够缓存的执行计划,对于相同类型的SQL就可以跳过SQL解析和执行计划生成阶段。MYSQL缓存完整的SELECT 查询结果。当查询命中缓存时,立刻返回结果,跳过了解析、优化和执行阶段。MySQL如何判断缓存命中Mysql 缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包括:查询本身、当前要查询的数据库、客户端协议的版本等一些其他可能会影响 返回结果的信息。如何判断是否...

weixin_29313239的博客 156

告别调试烦恼:用Lattice Diamond手把手教你JTAG烧录FPGA(附SRAM/Flash模式详解)

本文详细介绍了使用Lattice Diamond软件进行JTAG烧录FPGA的全流程,包括SRAM临时调试和Flash固化的核心区别。从环境准备、硬件连接到文件准备、烧录模式选择,再到典型问题排查和高级技巧,手把手教你快速掌握FPGA烧录技术,提升开发效率。

weixin_42569329的博客 495

MySQL分区表的局限和限制

禁止构建 分区表达式不支持以下几种构建: 存储过程,存储函数,UDFS或者插件 声明变量或者用户变量 可以参考分区不支持的SQL函数 算术和逻辑运算符 分区表达式支持+,-,*算术运算,但是不支持DIV和/运算(还存在,可以查看Bug #30188, Bug #33182)。但是,结果必须是整形或者NULL(线性分区键除外,想了解更多信息,可以查看分区类型)。 分区表

磨剪子磨菜刀君 501

RT-DETR改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU等)

本文记录的是改进RT-DETR的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 1922

【毕设级教程】从0到1实现基于YOLOv8的UA-DETRAC交通目标检测系统(含UI界面,助力智能交通毕设)

本项目基于YOLOv8模型和UA-DETRAC数据集开发了一个交通目标检测系统,包含数据处理、模型训练和可视化界面全流程。UA-DETRAC数据集包含多种交通场景下的车辆标注,通过格式转换适配YOLOv8训练要求。系统采用PyQt开发交互界面,支持图像检测、结果显示等功能。该项目技术路线清晰,既展现深度学习在智能交通中的应用,又提供完整的可视化展示方案,适合作为计算机视觉相关毕业设计选题。

m0_64661770的博客 149

MySQL5.7-高级特性浅解

事务、严格模式、视图、存储过程、触发器、内置函数和操作符、流程控制、索引

花城的博客 385

uniapp [全端兼容] - 实现接入使用天地图及卫星视图切换功能,在国家天地图上自由切换地图显示类型(卫星视图/地形视图/卫星混合/地形混合/普通视图)天地图切换视图显示改成卫星风格,切换地图图层

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,天地图,视图,卫星,地图类型切换,uniAPP天地图,改成卫星视角,在线地图切换,来回切换卫星图,天地图如何实现来回切换卫星图,地形图,卫星视图,VUE3引入天地图卫星版,详细教程示例源码代码,天地图切换卫星用什么api,卫星视角API方法,vue3卫星天地图,能改地图的显示方式,vue3中使用天地图自定义样式切换地图图层,切换报错,加载出错,卫星图太卡,地图图层更换,vue3安装集成天地图详细示例源

🏆 前端领域优质创作者 1万+

高性能MySQL】第7章MySQL高级特性 中

7.3外键约束 有使用成本,修改时在另一张表中执行查找操作;加锁、慢 如果确保两个相关表数据一致的话,使用外键比在应用程序汇总检查一致性性能更高   7.4MySQL内部存储代码 通过触发器、存储过程、函数的形式存储代码,5.1开始,可在定时任务中存代码 不同类型的存储代码区别:执行上下文(输入输出),存储过程/函数都可以接收参数然后返回值,但是触发器和事件却不行; 优缺点: 1、...

天生我材必有用,千金散尽还复来。 371

PCL 计算点云的体积密度(C++详细过程版)

本文提出了一种基于点云体积密度的计算与可视化方法。算法通过KdTree搜索每个点的邻域,利用球体积公式计算单位体积内的点数作为密度值,并存储在点云强度属性中。代码实现了点云读取、密度计算和可视化功能,使用PCL库完成邻域搜索和密度渲染。结果显示,该方法能有效反映点云密度分布,为后续点云处理提供密度特征参考。文章附有完整C++代码实现和可视化效果图,适用于点云密度分析和特征提取应用。

点云侠的博客 308

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

高性能MySQL】第7章MySQL高级特性 下

7.10全文索引 通过关键字匹配进行查询过滤,基于相似度的查询 有自己独特的语法,没有索引可以工作,有了索引效率更高,全局搜索的索引有独特的结构;全文索引支持各种字符内容的搜索,也支持自然语言搜索和布尔搜索 主讲MyISAM的全文索引:     作用对象时全文集合,具体的:对表某一条记录,mysql会将需要索引的列全部拼接成一个字符串,进行索引 myisam是一类特殊的b-tree索引:...

天生我材必有用,千金散尽还复来。 438

Camera2Demo

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

7 MySQL高级特性

7.1 分区表 PARTITION BY RANGE(YEAR(order_data)) ( ) 分区表限制: 一个表最多 1024 个分区 分区表无法使用外键 7.1.1 分区表的原理 7.1.2 分区表的类型 7.1.3 如何使用分区表 7.1.4 什么情况下会出现问题 NULL值会使分区过滤无效 分区列和索引列不匹配 7.1.5 查询优化 EXPLAIN PARTITIONS SELE 查看是否执行了分区过滤 后面视图,触发器啥的跳过了。。。 ...

chenlexh的专栏 113

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深度学习工具包 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")

7.高性能MySQL --- MySQL 高级特性

绑定变量: 客户端向服务器发送一个SQL原型,服务端收到这个SQL后,解析并储存这个SQL语句的执行部分。 返回给客户端一个 SQL 句柄。以后每次执行这类查询,客户端都指定执行这个句柄。 优点: 服务器只解析一次SQL; 服务端的某些优化器只需要执行一次,因为它会缓存一部分执行计划; 以二进制的形式发送参数和句柄,比每次都发送ASCII码更有效率,一个二进制日期只要3个

enlyhua的专栏 572

【高性能MySQL】第7章MySQL高级特性 上 分区 视图

前言: mysql从5.0和5.1开始引入很多高级特性:分区 、触发器等,这些特性表现如何、带你去发现 7.1分区表 分区表是独立逻辑表,底层由多个物理子表组成 底层文件系统看、分区表all有个#分隔命名的表文件 对底层表的封装:索引也是按分区子表定义的,无全局索引 实现分区的代码是一组底层表的句柄对象Handler Object的封装 对分区表(可直接)请求:通过句柄转成存储引擎接...

天生我材必有用,千金散尽还复来。 852

《高性能MySQL》阅读笔记-第7章 MySQL高级特性

7.1 分区表 分区表是一个独立的逻辑表,底层由多个物理子表组成。实现分区的代码是对一组底层表的句柄对象的封装。 MySQL在创建表时使用PARTITION BY子句定义每个分区存放的数据。 分区一个目的就是将数据按一个较粗粒度分在不同表中。可以将相关数据存放在一起,如果想一次删除整个分区的数据也很方便。 分区表操作 优点: 表非常大无法全部放在内存中,或在表的最后部...

拓拓的博客 371

MySQL高级特性篇(7)-数据库版本控制与迁移

MySQL数据库版本控制与迁移是指在应用程序的开发过程中,对数据库结构和数据进行管理、追踪和更新的一系列操作。它包括了数据库的版本管理、变更脚本的编写与执行以及数据迁移等工作。数据库版本控制和迁移的主要目的是解决数据库结构和数据的演进性问题。随着时间的推移,数据库的结构和数据需要不断变更,以满足新的业务需求。版本控制和迁移能够帮助开发团队协同工作,确保数据库的一致性和可追溯性。MySQL数据库版本控制与迁移是软件开发中非常重要的一部分。

俞兆鹏的博客 2229

MySql速成笔记7(高级特性与新特性)

只要一个业务包含两条以上的修改语句就应该加事物。

Zssss12的博客 112

5.《高性能MySQL》个人读书笔记 - 【第7章 MySQL高级特性】

1、分区表 分区表的原理 分区表的类型 如何使用分区表 这里先给出一个很实用的案例:查10亿条数据: 上面这两种策略也会出现问题的,如下介绍; 什么情况下会出现问题 查询优化 2、视图 3、外键约束 4、在MySQL内部存储代码 存储过程和函数 触发器 事件 在存储程序中保留注释 5、游.

ScorpC的博客 216

高性能MySQL读书笔记(7)--MySQL高级特性

weixin_51438023的博客 185

python从基础入门到精通实战教程_MySQL 5.7从入门到实战 视频教学版 张婷 MySQL5.7从入门到精通 MySQL实战开发技术 MySQL技术教程 MySQL入门书籍 数据库技术丛书...

书名:MySQL 5.7从入门到实战(视频教学版)作者:张婷定价:118元印次:1-1ISBN:9787302498506出版日期:2018.06.01印刷日期:2018.05.04一篇 MySQL基础1章 数据库与MySQL 31.1 认识数据库 31.1.1 我们为什么必须学习数据库 31.1.2 数据库技术经历的阶段 41.1.3 数据库管理系统提供的功能...

weixin_39642981的博客 482

MySQL高级进阶

MySQL高级 &nbsp;&nbsp;Cent OS7 &nbsp;&nbsp;&nbsp;&nbsp;下载地址 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;https://www.centos.org/download/ 1.进入官网,找到下载, 下面个ios镜像都可以择 2.使用链接下载cent os ios centos7安装GUI图形界面 &nbsp;&nb

Java肖帝的博客 4436
上一篇: 6、查询性能优化
下一篇: 8、优化服务器设置
geek-wmy
博客等级 码龄9年 322粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值