首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL 索引

我们用一个例子来逐渐引出啥是索引。话说大老板东哥有一天想体验一下快递小哥的生活,就去自家快递公司准备干活了,一进仓库看到一地的快递,兴冲冲的就问旁边的快递小哥 “这么多快递,我要找一个人的快递怎么办?”。快递小哥说 “你可以一件件找,直到找到你要的那件快递”,东哥一听脸顿时黑了 “淦!上十万件快递你要我一件件找,是想累死我,然后继承我的白条吗?” 说完一甩手扭头就会豪宅去了。   第二天,快递公司老板去找东哥说 “领导,我们已经改进了,再去指导指导呗”。东哥一听,哎呀!动作挺快,然后就又到快递公司了,问 “你们想出什么办法了吗”。快递小哥连忙回答 “我们给所有的快递都编了号,做了一个表格,只要从表格中找到编号就可以找到快递了”,东哥心想,我从上十万的名单里找出了编码,还要去上十万的快递里扒出快递,还是太累了就说 “我时间有限有没有更快的办法”。   快递公司老板一听,这还得了,大 BOOS 不满意了,得亏有备用方案,就说 “领导,我们还有个方案,我们做个快递柜,1 ~ 10 号快递放 0 号,10 ~ 20 放 1 号,依次类推,只要找到了快递编码,很快就可以找到快递了”。东哥一听,不错哈!这么干就快多了,但是我还要从上十万的表格中找出编码,难受啊!一脸的难受。快递公司老板冷汗直流,这是嫌找编码满了啊,该怎么办,BOOS 一怒,回家种地。这时一个程序员站住来说 “领导,我们还有个方案,我们把表格进行优化,按照姓名首字母来分类,就可以很快的找到指定的名字和编码”。东哥大喜,升职加薪!   从上面的例子可以推出,如果没有索引,必须遍历整个表,直到指定快递被找到为止;有了索引之后,即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。官方来讲就是:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

04

Memory-augmented Deep Autoencoder for Unsupervised Anomaly D

深度自编码在异常检测中得到了广泛的应用。通过对正常数据的训练,期望自编码器对异常输入产生比正常输入更高的重构误差,以此作为识别异常的判据。然而,这一假设在实践中并不总是成立。有人观察到,有时自动编码器“概括”得很好,也能很好地重建异常,导致异常的漏检。为了减轻基于自编码器的异常检测的这个缺点,我们建议使用内存模块来增加自编码器,并开发一种改进的自编码器,称为内存增强自编码器,即MemAE。对于给定的输入,MemAE首先从编码器获取编码,然后将其作为查询来检索与重构最相关的内存项。在训练阶段,内存内容被更新,并被鼓励表示正常数据的原型元素。在测试阶段,学习记忆是固定的,从正常数据中选取少量记忆记录进行重构。因此,重建将趋向于接近一个正常的样本。从而增强异常的重构误差,用于异常检测。MemAE没有对数据类型的假设,因此适用于不同的任务。在各种数据集上的实验证明了该备忘录具有良好的泛化性和较高的有效性。

01

浅谈数据库设计技巧(上)(转)

转一篇他人写的数据库设计技巧,感觉也不一定都正确,开拓一下思路吧。 说到数据库,我认为不能不先谈数据结构。1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法。尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法。面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加处理其数据的函数(即算法),最后,再给类中的数据成员和函数划分访问权限,从而实现封装。   数据库的最初雏形据说源自美国一个奶牛场的记账薄(纸质的,由此可见,数据库并不一定是存储在电脑里的数据^_^),里面记录的是该奶牛场的收支账目,程序员在将其整理、录入到电脑中时从中受到启发。当按照规定好的数据结构所采集到的数据量大到一定程度后,出于程序执行效率的考虑,程序员将其中的检索、更新维护等功能分离出来,做成单独调用的模块,这个模块后来就慢慢发展、演变成现在我们所接触到的数据库管理系统(DBMS)——程序开发中的一个重要分支。   下面进入正题,首先按我个人所接触过的程序给数据库设计人员的功底分一下类:   1、没有系统学习过数据结构的程序员。这类程序员的作品往往只是他们的即兴玩具,他们往往习惯只设计有限的几个表,实现某类功能的数据全部塞在一个表中,各表之间几乎毫无关联。网上不少的免费管理软件都是这样的东西,当程序功能有限,数据量不多的时候,其程序运行起来没有什么问题,但是如果用其管理比较重要的数据,风险性非常大。   2、系统学习过数据结构,但是还没有开发过对程序效率要求比较高的管理软件的程序员。这类人多半刚从学校毕业不久,他们在设计数据库表结构时,严格按照教科书上的规定,死扣E-R图和3NF(别灰心,所有的数据库设计高手都是从这一步开始的)。他们的作品,对于一般的access型轻量级的管理软件,已经够用。但是一旦该系统需要添加新功能,原有的数据库表差不多得进行大换血。   3、第二类程序员,在经历过数次程序效率的提升,以及功能升级的折腾后,终于升级成为数据库设计的老鸟,第一类程序员眼中的高人。这类程序员可以胜任二十个表以上的中型商业数据管理系统的开发工作。他们知道该在什么样的情况下保留一定的冗余数据来提高程序效率,而且其设计的数据库可拓展性较好,当用户需要添加新功能时,原有数据库表只需做少量修改即可。   4、在经历过上十个类似数据库管理软件的重复设计后,第三类程序员中坚持下来没有转行,而是希望从中找出“偷懒”窍门的有心人会慢慢觉悟,从而完成量变到质变的转换。他们所设计的数据库表结构有一定的远见,能够预测到未来功能升级所需要的数据,从而预先留下伏笔。这类程序员目前大多晋级成数据挖掘方面的高级软件开发人员。   5、第三类程序员或第四类程序员,在对现有的各家数据库管理系统的原理和开发都有一定的钻研后,要么在其基础上进行二次开发,要么自行开发一套有自主版权的通用数据库管理系统。 我个人正处于第三类的末期,所以下面所列出的一些设计技巧只适合第二类和部分第三类数据库设计人员。同时,由于我很少碰到有兴趣在这方面深钻下去的同行,所以文中难免出现错误和遗漏,在此先行声明,欢迎大家指正,不要藏私哦8)   一、树型关系的数据表   不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类,某些子类又有子类这样的情况。当类别不确定,用户希望可以在任意类别下添加新的子类,或者删除某个类别和其下的所有子类,而且预计以后其数量会逐步增长,此时我们就会考虑用一个数据表来保存这些数据。按照教科书上的教导,第二类程序员大概会设计出类似这样的数据表结构: 类别表_1(Type_table_1) 名称     类型    约束条件   说明 type_id   int   无重复   类别标识,主键 type_name   char(50) 不允许为空 类型名称,不允许重复 type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值   这样的设计短小精悍,完全满足3NF,而且可以满足用户的所有要求。是不是这样就行呢?答案是NO!Why?   我们来估计一下用户希望如何罗列出这个表的数据的。对用户而言,他当然期望按他所设定的层次关系一次罗列出所有的类别,例如这样: 总类别   类别1     类别1.1       类别1.1.1     类别1.2   类别2     类别2.1   类别3     类别3.1     类别3.2   ……   看看为了实现这样的列表显示(树的先序遍历),要对上面的表进行多少次检索?注

01

初学者SQL语句介绍

1.用 Select 子句检索记录     Select 子句是每一个检索数据的查询核心。它告诉数据库引擎返回什么字段。     Select 子句的常见形式是:     Select *     该子句的意思是“返回在所指定的记录源中能找到的所有字段”。这种命令形式很方便,因为你无需知道从表中检索的字段名称。然而,检索表中的所有列是低效的。因此,因该只检索需要的字段,这样可以大大的提高查询的效率。     2.使用 From 子句指定记录源     From 子句说明的是查询检索记录的记录源;该记录源可以是一个表或另一个存储查询。     你还能从多个表中检索记录,这在后面的章节中将介绍。     例子:     Select * From students 检索students表中的所有记录     3.用 Where 子句说明条件     Where 子句告诉数据库引擎根据所提供的一个或多个条件限定其检索的记录。条件是一个表达式,可具有真假两种判断。     例子:     Select * From students Where name="影子"     返回students中name字段为影子的列表,这次所返回的结果没有特定顺序,除非你使用了 Order By 子句。该子句将在后面的章节介绍。     注意:Where 子句中的文本字符串界限符是双引号,在VB中因改为单引号,因为在VB中字符串的界定符是双引号。     补充:     使用 And 和 Or 逻辑可以将两个或更多的条件链接到一起以创建更高级的 Where 子句。     例子:     Select * From students Where name="影子" And number>100     返回name为影子number大于100的列表。     例子:     Select * From students Where name="影子" And (number>100 Or number<50)     返回name为影子,number大于100或者小于50的列表。     Where 子句中用到的操作符     操作符 功能     < 小于     <= 小于或等于     > 大于     >= 大于或等于     = 等于     <> 不等于     Between 在某个取值范围内     Like 匹配某个模式     In 包含在某个值列表中     SQL中的等于和不等于等操作符与VB中的意义和使用相同     例子:     (1).Between 操作符     Use cust     Select * From students     Where number Between 1 and 100     Between 操作符返回的是位于所说明的界限之内的所有记录值。这个例子就返回 number 字段 1 到 100 之间的全部记录。     (2). Like 操作符和通配符     Use cust     Select * From students     Where name Like "%影%"     Like 操作符把记录匹配到你说明的某个模式。这个例子是返回含“影”的任意字符串。     四种通配符的含义     通配符 描述     % 代表零个或者多个任意字符     _(下划线) 代表一个任意字符     [] 指定范围内的任意单个字符     [^] 不在指定范围内的任意单个字符     全部示例子如下:     Like "BR%" 返回以"BR"开始的任意字符串     Like "br%" 返回以"Br"开始的任意字符串     Like "%een" 返回以"een"结束的任意字符串     Like "%en%" 返回包含"en"的任意字符串     Like "_en" 返回以"en"结束的三个字符串     Like "[CK]%" 返回以"C"或者"K"开始的任意字符串     Like "[S-V]ing" 返回长为四个字符的字符串,结尾是"ing",开始是从S到V。     Like "M[^c]%" 返回以"M"开始且第二个字符不是"c"的任意字符串。     4. 使用 Order By 对结果排序     Order By 子句告诉数据库引擎对其检索的记录进行排序。可以对任何字段排序,或者对多个字段排序,并且可以以升序或隆序进行排序。     在一个正式的 Select 查询之后包含一个 Order By 子句,后跟想排序的字段(可以有多个)便可以说明一个排序顺序。     例子:

03
领券