MySQL中如何设置唯一索引,联合索引?

MySQL中如何设置唯一索引,联合索引?,第1张

1UNIQUE 关键字建唯一索引\x0d\mysql> CREATE TABLE `wb_blog` ( \x0d\ -> `id` smallint(8) unsigned NOT NULL, \x0d\ -> `catid` smallint(5) unsigned NOT NULL DEFAULT '0', \x0d\ -> `title` varchar(80) NOT NULL DEFAULT '', \x0d\ -> `content` text NOT NULL, \x0d\ -> PRIMARY KEY (`id`), \x0d\ -> UNIQUE KEY `catename` (`catid`) \x0d\ -> ) ; \x0d\如果建好表了,可以用以下语句建\x0d\ mysql> CREATE UNIQUE INDEX catename ON wb_blog(catid); \x0d\\x0d\2联合索引\x0d\ALTER TABLE `tasks`\x0d\ADD INDEX `testabc` (`title`, `created`) ;\x0d\\x0d\3联合唯一索引(假设有这个需求,在同一天内不能建两个tiltle一样的任务)\x0d\ALTER TABLE `tasks`\x0d\ADD UNIQUE INDEX `testabc` (`title`, `created`) ;\x0d\\x0d\数据库建索引的科学性事关数据库性能,索引也不是越多越好。

随着科技的发展,物联网发展的越发蓬勃。硬件联网也是靠着软件驱动,所以智能设备的性能很多时候是在考验设备的软件能力。

然而物联网的测试涉及面广,需要对APP/UI测试,还需要对协议,后台,接口进行测试,同时对硬件的性能,稳定性,安全性等测试,还有各,WIFI,蓝等模组测试。

针对目前物联网智能硬件测试从上到下环节众多,很难有专门的工具进行统一调度测试和管理,宏控协同测试系统为测试开发人员提供了一套通用的协同自动化测试系统,帮助测试人员自下而上的完成物联网设备从底层的模块测试到集成测试,到最后的系统测试。

宏控协同测试系统支持V模型开发,提供需求导入和需求的管理,同时可以建立需求和测试用例的关联,还能提供与测试结果的追溯关系。

在测试用例管理阶段:提供用例的图形化编辑,子脚本的调用,用例的导出等

在测试执行阶段,对测试过程实时监督,同时可以选择执行测试用例数量和定时触发执行,支持测试的异常恢复……

1、物联网(The Internet of Things,简称IOT)是指通过 各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、 连接、互动的物体或过程,采集其声、光、热、电、力学、化 学、生物、位置等各种需要的信息。

2、组成:物联网的基本特征可概括为整体感知、可靠传输和智能处理 。

(1)整体感知—可以利用射频识别、二维码、智能传感器等感知设备感知获取物体的各类信息。

(2)可靠传输—通过对互联网、无线网络的融合,将物体的信息实时、准确地传送,以便信息交流、分享。

(3)智能处理—使用各种智能技术,对感知和传送到的数据、信息进行分析处理,实现监测与控制的智能化。

扩展资料:

常见的运用案例有:

1、物联网传感器产品已率先在上海浦东国际机场防入侵系统中得到应用。机场防入侵系统铺设了3万多个传感节点,覆盖了地面、栅栏和低空探测,可以防止人员的翻越、偷渡、恐怖袭击等攻击性入侵。而就在不久之前,上海世博会也与无锡传感网中心签下订单,购买防入侵微纳传感网1500万元产品。

2、ZigBee路灯控制系统点亮济南园博园。ZigBee无线路灯照明节能环保技术的应用是此次园博园中的一大亮点。园区所有的功能性照明都采用了ZigBee无线技术达成的无线路灯控制。

3、智能交通系统(ITS)是利用现代信息技术为核心,利用先进的通讯、计算机、自动控制、传感器技术,实现对交通的实时控制与指挥管理。交通信息采集被认为是ITS的关键子系统,是发展ITS的基础,成为交通智能化的前提。无论是交通控制还是交通违章管理系统,都涉及交通动态信息的采集,交通动态信息采集也就成为交通智能化的首要任务。

参考资料来源:百度百科-物联网

本文预计分为两个部分:

(1)联合索引部分的基础知识

在这个部分,我们温习一下联合索引的基础

(2)联合索引部分的实战题

在这个部分,列举几个我认为算是实战中的代表题,挑出来说说。

正文

基础

讲联合索引,一定要扯最左匹配!放心,我不扯有的没的,几句话懂个大概就行!

最左匹配

所谓最左原则指的就是如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配,值得注意的是,当遇到范围查询(>、<、between、like)就会停止匹配。

假设,我们对(a,b)字段建立一个索引,也就是说,你where后条件为

a=1a=1and b =2

是可以匹配索引的。但是要注意的是~你执行

b=2and a =1

也是能匹配到索引的,因为Mysql有优化器会自动调整a,b的顺序与索引顺序一致。

相反的,你执行

b=2

就匹配不到索引了。

而你对(a,b,c,d)建立索引,where后条件为

a =1andb =2andc >3andd =4

那么,a,b,c三个字段能用到索引,而d就匹配不到。因为遇到了范围查询!

最左匹配的原理?

假设,我们对(a,b)字段建立索引,那么入下图所示

如图所示他们是按照a来进行排序,在a相等的情况下,才按b来排序。

因此,我们可以看到a是有序的1,1,2,2,3,3。而b是一种全局无序,局部相对有序状态!

什么意思呢?

从全局来看,b的值为1,2,1,4,1,2,是无序的,因此直接执行b = 2这种查询条件没有办法利用索引。

从局部来看,当a的值确定的时候,b是有序的。例如a = 1时,b值为1,2是有序的状态。当a=2时候,b的值为1,4也是有序状态。

因此,你执行a = 1 and b = 2是a,b字段能用到索引的。而你执行a > 1 and b = 2时,a字段能用到索引,b字段用不到索引。因为a的值此时是一个范围,不是固定的,在这个范围内b值不是有序的,因此b字段用不上索引。

综上所示,最左匹配原则,在遇到范围查询的时候,就会停止匹配。

实战

OK,懂上面的基础,我们就可以开始扯了~我举了经典的五大题型,看完基本就懂!

题型一

如果sql为

SELECTFROMtableWHEREa =1andb =2andc =3;

如何建立索引

如果此题回答为对(a,b,c)建立索引,那都可以回去等通知了。

此题正确答法是,(a,b,c)或者(c,b,a)或者(b,a,c)都可以,重点要的是将区分度高的字段放在前面,区分度低的字段放后面。像性别、状态这种字段区分度就很低,我们一般放后面。

例如假设区分度由大到小为b,a,c。那么我们就对(b,a,c)建立索引。在执行sql的时候,优化器会 帮我们调整where后a,b,c的顺序,让我们用上索引。

题型二

如果sql为

SELECTFROMtableWHEREa >1andb =2;

如何建立索引

如果此题回答为对(a,b)建立索引,那都可以回去等通知了。

此题正确答法是,对(b,a)建立索引。如果你建立的是(a,b)索引,那么只有a字段能用得上索引,毕竟最左匹配原则遇到范围查询就停止匹配。

如果对(b,a)建立索引那么两个字段都能用上,优化器会帮我们调整where后a,b的顺序,让我们用上索引。

题型三

如果sql为

SELECTFROM`table`WHEREa >1andb =2andc >3;

如何建立索引

此题回答也是不一定,(b,a)或者(b,c)都可以,要结合具体情况具体分析。

拓展一下

SELECTFROM`table`WHEREa =1andb =2andc >3;

怎么建索引?嗯,大家一定都懂了!

题型四

SELECTFROM`table`WHEREa =1ORDERBYb;

如何建立索引?

这还需要想?一看就是对(a,b)建索引,当a = 1的时候,b相对有序,可以避免再次排序!

那么

SELECTFROM`table`WHEREa >1ORDERBYb;

如何建立索引?

对(a)建立索引,因为a的值是一个范围,这个范围内b值是无序的,没有必要对(a,b)建立索引。

拓展一下

SELECTFROM`table`WHEREa =1ANDb =2ANDc >3ORDERBYc;

怎么建索引

题型五

SELECTFROM`table`WHEREaIN(1,2,3)andb >1;

如何建立索引?

还是对(a,b)建立索引,因为IN在这里可以视为等值引用,不会中止索引匹配,所以还是(a,b)!

拓展一下

SELECTFROM`table`WHEREa =1ANDbIN(1,2,3)ANDc >3ORDERBYc;

如何建立索引?此时c排序是用不到索引的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/12659291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存