count(*)这么慢,我该怎么办?

问题的引出 在开发系统的时候,我们可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条select count(*) from t语句不就解决了吗? 但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL怎么这么笨...

2019-04-18 20:09:16

阅读数 59

评论数 0

怎么给字符串字段加索引

问题的抛出:如何给字符串字段加索引? 现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们要分析的问题。 假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的: create tabke SUser ( ID bigint unsigned primar...

2019-04-13 14:58:40

阅读数 87

评论数 0

普通索引与唯一索引

所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制)。该类型的索引可以创建在任何数据类型的字段上。 所谓唯一索引,就是在创建索引时,限制索引的值必须是唯一的。通过该类型的索引可以更快速地查询某条记录。 普通索引还是唯一索引? 假设你在维护一个市民系统,每个人都有一个唯一...

2019-04-08 20:20:06

阅读数 4823

评论数 0

行锁功过

我们之前学习了MySQL的全局锁和表级锁,现在来学习一下行锁。 MySQL的行锁是在引擎层由各个引擎字节实现的。但并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。...

2019-04-04 16:48:33

阅读数 57

评论数 0

TCP/IP协议

运输层的两个主要协议 TCP/IP运输层的两个主要协议都是互联网的正式标准,即: 用户数据报协议UDP(User Datagram Protocol)[RFC 768] 传输控制协议TCP(Transmission Control Protocol)[RFC 793] 用户数据报协议UD...

2019-04-02 22:22:00

阅读数 56

评论数 0

全局锁和表锁

数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。 根据加锁的范围,MySQL里面的锁大致可以分成全局锁,表级锁和行锁三类。这里我们重点学习全局锁和表锁。关于行锁,我们将在下次再做详细了解...

2019-04-01 23:19:19

阅读数 51

评论数 0

深入浅出索引(下)

首先,我们来看这个问题: 在下面这个表T中,如果我执行select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行? 下面是这个表T的初始化语句: create table T ( ID int primary key, k int...

2019-04-01 22:07:09

阅读数 505

评论数 0

深入浅出索引(上)

索引是对数据库表中一个或多个列(例如,employee表的姓名(name)列)的值进行排序的结构。 索引 提到数据库索引,我想大家肯定不会陌生,在日常工作中会经常接触到。比如某一个SQL查询比较慢,分析完原因之后,你可能就会说“给某个字段加个索引吧”之类的解决方案。但是到底什么是索引,索引...

2019-03-31 14:38:38

阅读数 75

评论数 0

C++中参数传递

参数传递 每次调用函数时都会重新创建它的形参,并用传入的实参对形参进行初始化。 和其他变量一样,形参的类型决定了形参和实参交互的方式。如果形参是引用类型,它将绑定到对应的实参上;否则,将实参的值拷贝后赋给形参。 当形参是引用类型时,我们说它对应的实参被引用传递(passed by refe...

2019-03-31 10:10:23

阅读数 35

评论数 0

数据库事务隔离

数据库事务(事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 事务 和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转100块钱,而此时你的银行卡只有100块钱。转账过程具体到程序里会有一系列操作,比如查询余额、做加减法、更新余...

2019-03-30 14:01:52

阅读数 45

评论数 0

C++中指针与引用

引用 引用(reference)为对象起了另外一个名字,引用类型引用(refer to)另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名: int ival = 1024; int &refVal = ival; // re...

2019-03-30 10:01:49

阅读数 39

评论数 0

数据库日志系统 一条SQL更新语句的执行过程

一条简单的SQL更新语句 我们从一个表的一条更新语句说起,下面是这个表的创建语句,这个表有一个主键ID和一个整型字段c: mysql> create table T(ID int primary key, c int); 如果要将ID=2这一行的值加1,SQL语句就会这么写...

2019-03-29 14:54:26

阅读数 64

评论数 0

数据库基础架构 一条SQL查询语句的执行过程

一条简单的SQL查询语句 假设我们有一个简单的表,表里只有一个ID字段,在执行下面的这个查询语句的时候: mysql> select * from T where ID=10; 我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在MySQL内部的执行过程。 下面给...

2019-03-29 12:19:19

阅读数 53

评论数 0

数据结构与算法——字符串匹配(上)

字符串匹配是计算机科学中最古老、研究最广泛的问题之一 在编辑文本程序过程中,我们经常需要在文本中找到某个模式的所有出现位置。典型情况是,一段正在被编辑的文本构成一个文件,而所要搜寻的模式是用户正在输入的特定的关键字。有效的解决这个问题的算法叫做字符串匹配算法,该算法能够极大提高编辑文本程序时的响...

2019-03-24 10:10:47

阅读数 66

评论数 0

数据结构与算法——图的搜索

搜索算法 我们知道,算法是作用于数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于“图”这种数据结构的。这是因为,图这种数据结构的表达能力很强,大部分涉及搜索的场景都可以抽象成“图”。图上的搜索算法,最直接的理解就是,在图中找出从一个顶点除法,到另一个顶点的路径。具体方法有很多,比如这...

2019-03-22 14:12:35

阅读数 49

评论数 0

数据结构与算法——图

图:一种非线性的数据结构。 我们之前学习了树这种非线性的数据结构,接下来我们了解另一种非线性的数据结构,图(Graph)。和树比起来,这是一种更加复杂的非线性数据结构。我们知道,树中的元素我们称为节点,图中的元素我们则叫作顶点(vertex)。从下图中可以看出来,图中的一个顶点可以与任意其他顶点...

2019-03-21 19:56:10

阅读数 54

评论数 0

数据结构与算法——堆的应用

堆的应用一:优先级队列 优先级队列,顾名思义,它首先应该是一个队列。我们之前学习过,队列的最大的特性就是先进先出。不过,在优先级队列中,数据的出队顺序不是先进先出,而是按照优先级来,优先级最高的,最先出队。 优先级队列的实现有很多种方法,但是用堆来实现是最直接、最高效的。这是因为,堆和优先级...

2019-03-20 19:03:26

阅读数 59

评论数 0

数据结构与算法——堆与堆排序

堆(heap)是计算机科学中一类特殊的数据结构的统称 堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆是一棵完全二叉树 堆中每一个节点的值都必须大于等于(或者小于等于)其子树中每个节点的值 下面解释一下这两点性质: 第一点,堆必须是一个完全二叉树。完全二叉树我们之前学习过,...

2019-03-17 13:57:57

阅读数 89

评论数 0

数据结构与算法——红黑树

特殊的平衡二叉查找树——红黑树 之前我们学习了二叉查找树,它支持快速插入、删查找操作,各个操作的时间复杂度根树的高度成正比,理想情况下,时间复杂度是O(height)。不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于的情况,从而导致各个操作的效率下降。极端情况下,二叉树会退化为链...

2019-03-16 14:57:32

阅读数 53

评论数 0

数据结构与算法——二叉树

非线性结构——树 树(Tree) 树(tree)可以用几种方式定义。定义树的一种自然的方式是递归的方式。一棵树是一些结点(node)的集合。这个集合可以是空集;若不是空集,则树由称作根(root)的结点r以及0个或多个非空的(子)树T1,T2,...,TK组成,这些子树中每一颗的根都被来自...

2019-03-15 22:39:04

阅读数 39

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭