
数据库
文章平均质量分 87
数据库设计和优化
Sophia$
算法
展开
-
强化学习(2)-一个强化学习 Q-learning 算法的简明教程
本文是对http://mnemstudio.org/path-finding-q-learning-tutorial.htm的翻译,共分两部分,第一部分为中文翻译。翻译时为方便读者理解,有些地方采用了意译的方式,此外,原文中有几处笔误,在翻译时已进行了更正。这篇教程通俗易懂,是一份很不错的学习理解 Q-learning 算法工作原理的材料。1. Step by step tourial2. Q-learning example by hand3. 用Python.转载 2021-03-03 16:52:30 · 515 阅读 · 2 评论 -
强化学习(1)-介绍
1. 机器学习分类机器学习算法可以分为3种:有监督学习(Supervised Learning)、无监督学习(Unsupervised Learning)和强化学习(Reinforcement Learning),如下图所示:有监督学习、无监督学习、强化学习具有不同的特点: 有监督学习是有一个label(标记)的,这个label告诉算法什么样的输入对应着什么样的输出,常见的算法是分类、回归等; 无监督学习则是没有label(标记),常见的算法是聚类; 强化学习强调...转载 2021-03-03 14:32:32 · 1623 阅读 · 0 评论 -
数据库索引-系列文章(6)-MySQL不为人知的主键与唯一索引约束
今天和大家简单聊聊MySQL的约束主键与唯一索引约束:PRIMARY KEY and UNIQUE Index Constraints文章不长,保证有收获。触发约束检测的时机: insert update 当检测到违反约束时,不同存储引擎的处理动作是不一样的。如果存储引擎支持事务,SQL会自动回滚。例子:create table t1 ( id int(10)primary key)engine=innodb;insert in...转载 2021-02-04 15:17:22 · 127 阅读 · 0 评论 -
数据库索引-系列文章(4)-InnoDB到底支不支持哈希索引,为啥不同的人说的不一样
继续回答水友提问(最近问MySQL的多):沈老师,我在网上看到不同的资料,有的说InnoDB支持哈希索引,有的说不支持,到底哪个是正确的呢?对于InnoDB的哈希索引,确切的应该这么说:(1)InnoDB用户无法手动创建哈希索引,这一层上说,InnoDB确实不支持哈希索引;(2)InnoDB会自调优(self-tuning),如果判定建立自适应哈希索引(Adaptive Hash Index, AHI),能够提升查询效率,InnoDB自己会建立相关哈希索引,这一层上说,Inn...转载 2021-02-04 14:27:40 · 160 阅读 · 0 评论 -
数据库索引-系列文章(1)
目录1. 什么是聚集索引,非聚集索引?2. 索引底层数据结构如何?3. InnoDB到底支不支持hash索引?4. 什么是回表查询,索引的覆盖?5. 什么是联合索引?6. 主键与唯一索引约束是啥?7. 类型不匹配,字符编码不匹配,会不会对索引命中产生影响?8. 负向查询,IN,OR,UNION哪些会对索引命中有影响?前段时间写数据库内核比较多,最近又有朋友问索引的应用了,其实相关索引应用之前或多或少写过,只是可能不这么系统,这一篇简单总结一下,并系统性补充一些概念。画转载 2021-02-04 15:36:31 · 143 阅读 · 0 评论 -
MySQL表锁,以为自己懂了,结果一个答对的都没有
1. 关于MySQL的如下问题,你能准确的答出来么?(1)和行锁相比,表锁有什么优势?(2)频繁group by的业务,用MyISAM更好,还是InnoDB更好,为什么?(3)某个session占有了表写锁,有另外N个session又要对表进行写操作,MySQL是如何处理的?(4)某个session释放了表写锁,有另外N个session要对表进行写操作,同时还有M个session要对表进行读操作,谁先抢到锁,为什么?(5)如何判断表锁是不是主要冲突点?(6)如何高效的实现并发插入与查转载 2021-02-02 19:54:36 · 95 阅读 · 0 评论 -
频繁插入(insert)的业务,用什么存储引擎更合适
继续回答星球水友提问:沈老师,MyISAM只支持表锁,但网上文章却说,在并发插入量比较大的时候,比较适合使用MyISAM,这矛盾吗?这个问题,涉及MySQL表锁的一些细节,借着这个问题,系统性说下表锁的“所以然”。画外音:网上不少文章只说结论,不说为什么,容易让人蒙圈。MySQL表锁知识系统性梳理。哪些存储引擎使用表锁?MySQL,除InnoDB支持行锁外,MySQL的其他存储引擎均只使用表锁,例如:MyISAM, MEMORY, MERGE等。表锁有...转载 2021-02-01 17:09:30 · 598 阅读 · 0 评论 -
数据库,主键为何不宜太长
继续回答星球水友提问:沈老师,我听网上说,MySQL数据表,在数据量比较大的情况下,主键不宜过长,是不是这样呢?这又是为什么呢?这个问题嘛,不能一概而论:(1)如果是InnoDB存储引擎,主键不宜过长;(2)如果是MyISAM存储引擎,影响不大;先举个简单的栗子说明一下前序知识。假设有数据表:t(id PK, name KEY, sex, flag);其中:(1)id是主键;(2)name建了普通索引;假设表中有四条记录:1, she...转载 2021-02-01 17:07:27 · 495 阅读 · 0 评论 -
同一个SQL语句,为什么性能差异这么大
《数据库允许空值,往往是悲剧的开始》一文通过explain来分析SQL的执行计划,来分析null对索引命中情况的影响,有不少朋友留言,问explain结果中的type字段,ref,ALL等不一样的值究竟是什么含义。今天花1分钟简单说下,常见的type结果及代表的含义,并且通过同一个SQL语句的性能差异,说明建对索引多么重要。1. explain结果中的type字段explain结果中的type字段代表什么意思?MySQL的官网解释非常简洁,只用了3个单词:连接类型(the join.转载 2021-01-29 13:40:47 · 638 阅读 · 0 评论 -
数据库索引-系列文章(8)-数据库允许空值(null),往往是悲剧的开始
数据库字段允许空值,会遇到一些问题,此处包含的一些知识点,和大家聊一聊。1. 数据准备:create table user (id int,name varchar(20),index(id))engine=innodb;insert into user values(1,'shenjian');insert into user values(2,'zhangsan');insert into user values(3,'lisi');说明:id为索引,非唯一(non u转载 2021-01-26 21:13:15 · 467 阅读 · 0 评论 -
数据库索引-系列文章(7)-两类非常隐蔽的全表扫描,不能命中索引
《MySQL死锁分析的两个工具》中,举了一个强制类型转换导致死锁的例子,有朋友询问是不是类型转换都不能命中索引,花1分钟细说一下。1. 第一类“列类型”与“where值类型”不符,不能命中索引,会导致全表扫描(full table scan)。1.1 数据准备:create table t1 (cellvarchar(3) primary key)engine=innodb default charset=utf8;insert into t1(cell) values ..转载 2021-01-26 20:35:30 · 152 阅读 · 0 评论 -
数据库索引-系列文章(2)-MyISAM与InnoDB的索引差异
目录1. MyISAM的索引2. InnoDB的索引3. 总结《数据库索引,到底是什么做的?》介绍了B+树,它是一种非常适合用来做数据库索引的数据结构:(1)很适合磁盘存储,能够充分利用局部性原理,磁盘预读;(2)很低的树高度,能够存储大量数据;(3)索引本身占用的内存很小;(4)能够很好的支持单点查询,范围查询,有序性查询;数据库的索引分为主键索引(Primary Inkex)与普通索引(Secondary Index)。InnoDB和MyISAM是怎么利用B+树.转载 2021-01-26 20:17:58 · 106 阅读 · 0 评论 -
数据库索引-系列文章(3)-数据库索引到底是什么做的
近期写数据库,不少朋友留言问MySQL索引底层的实现,今天简单聊一聊,少讲“是怎么样”,更多说说“为什么设计成这样”。问题1. 数据库为什么要设计索引?图书馆存了1000W本图书,要从中找到《架构师之路》,一本本查,要查到什么时候去?于是,图书管理员设计了一套规则:(1)一楼放历史类,二楼放文学类,三楼放IT类…(2)IT类,又分软件类,硬件类…(3)软件类,又按照书名音序排序…以便快速找到一本书。与之类比,数据库存储了1000W条数据,要从中找到name=”shenj.转载 2021-01-26 14:50:44 · 143 阅读 · 0 评论 -
数据库架构设计中,最重要的“基概”
本文介绍数据库架构设计中的一些基本概念。所有概念均以“用户中心”举例。画外音:这是一个提供用户注册、登录、信息查询与修改的常见业务。1. 单库架构单库架构,是业务初期最常见的数据库架构。 user-service:用户中心服务,对调用者提供友好的RPC接口 user-db:一个库进行数据存储 2. 分组架构数据库分组架构,即最常见的一主多从,主从同步,读写分离数据库架构: user-service:依旧是用户中心服务 user-db-M(mast转载 2021-01-26 13:56:03 · 203 阅读 · 0 评论 -
两个小工具,MySQL死锁分析
数据库死锁,是最难调试与追踪的。1. 问题同一个表,事务内先插入一条记录,再更新这条记录,并发时会死锁。并且能够复现。可以通过什么工具模拟并发事务,查看信息,解决问题呢?这是今天要分享的内容。2. 前置准备set session transaction isolation level repeatable read;set session autocommit=0;create table t (id int(20) primary key AUTO_INCR..转载 2021-01-26 10:30:18 · 186 阅读 · 0 评论 -
如何利用工具,迅猛定位低效SQL
目录1. 数据准备1.1 数据说明2.【Using where】3.【Using index】4.【Using index condition】5.【Using filesort】6.【Using temporary】7.【Using join buffer (Block Nested Loop)】8. 结尾本文通过构造各类SQL语句,对explain的Extra字段进行说明,启发式定位待优化低性能SQL语句。1. 数据准备create table user转载 2021-01-25 20:57:02 · 109 阅读 · 0 评论 -
数据库索引-系列文章(5)-回表查询和索引覆盖
1. 什么是回表查询?这先要从InnoDB的索引实现说起,InnoDB有两大类索引: 聚集索引(clustered index) 普通索引(secondary index) 2. InnoDB聚集索引和普通索引有什么差异?InnoDB聚集索引的叶子节点存储行记录,因此, InnoDB必须要有,且只有一个聚集索引:(1)如果表定义了PK,则PK就是聚集索引;(2)如果表没有定义PK,则第一个not NULL unique列是聚集索引;(3)否则,InnoDB会创建一个.转载 2021-01-25 16:06:16 · 240 阅读 · 1 评论 -
MySQL索引优化
本文主要讨论MySQL索引的部分知识。将会从MySQL索引基础、索引优化实战和数据库索引背后的数据结构三部分相关内容,展开说明。一、MySQL索引基础首先,我们将从索引基础开始介绍一下什么是索引,分析索引的几种类型,并探讨一下如何创建索引以及索引设计的基本原则。此部分用于测试索引创建的user表的结构如下:1. 什么是索引?“索引(在MySQL中也叫“键key”)是存储引擎快速找到记录的一种数据结构。”——《高性能MySQL》我们需要知道索引其实是一种数据结构,其功能是帮助我们快转载 2021-01-25 15:03:00 · 103 阅读 · 0 评论