索引

MS SQL入门基础:创建索引

孤街醉人 提交于 2020-03-14 09:47:22
  8.2.1 用CREATE INDEX 命令创建索引   CREATE INDEX 既可以创建一个可改变表的物理顺序的簇索引,也可以创建提高查询性能的非簇索引。其语法如下:   CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]   INDEX index_name ON {table | view } column [ ASC | DESC ] [,...n])   [WITH   [PAD_INDEX]   [ [, ] FILLFACTOR = fillfactor]   [ [, ] IGNORE_DUP_KEY]   [ [, ] DROP_EXISTING]   [ [, ] STATISTICS_NORECOMPUTE]   [ [, ] SORT_IN_TEMPDB ]   ]   [ON filegroup]   各参数说明如下: UNIQUE   创建一个惟一索引,即索引的键值不重复。在列包含重复值时,不能建惟一索引。如要使用此选项,则应确定索引所包含的列均不允许NULL 值,否则在使用时会经常出错。 CLUSTERED   指明创建的索引为簇索引。如果此选项缺省,则创建的索引为非簇索引。 NONCLUSTERED   指明创建的索引为非簇索引其索引。数据页中包含了指向数据库中实际的表数据页的指针。 index_name  

MySQL 查询优化

99封情书 提交于 2020-03-14 09:41:14
1、MySQL 查询统计数据表行数三种方式:select count(*) 、select count(1) 、select count(具体字段),三者查询效率是怎么样的呢? 解答: 在MySQL InnoDB 存储引擎中,count(*) 和count(*) 都是对所有结果进行count。如果有where 子句,则是对所有筛选条件的数据行进行统计;如果没有where子句,则是对数据表的数据行数进行统计。 因此count(*) 和 count(1) 本质上并没有区别,执行的复杂度都是O(N),也就是采用全表扫描,进行循环+计数的方式进行统计。 如果是MySQL MyISAM 存储引擎,统计数据表的行数只需要O(1)的复杂度,这是因为每张MyISAM的数据表都有一个meta信息存储了row_count值,而一致性则由表级锁来保证,因为InnoDB支持事务,采用行级锁和MVCC机制,所以无法像MyISAM一样,只维护一个row_count变量,因此采用扫描全表,进行循环+计数的方式来完成统计; 在执行过程中,count(*) 和 count(1)执行时间略有差别,不过效率可以基本看成是相等的。 一般情况,三者的执行效率count(1) = count(*) >count(字段)。我们尽量使用count(*),当然如果你知道你要统计的是某个字段的非空数据行数,则另当别论

存储过程编写经验和优化措施

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-14 09:40:59
一、适合读者对象 :数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人。   二、介绍 :在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。如果项目的SP较多,书写又没有一定的规范,将会影响以后的系统维护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过亲身经验,一个经过优化过的SP要比一个性能差的SP的效率甚至高几百倍。   三、内容:   1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。 2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。   3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点: a)SQL的使用规范 :  i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。  ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。  iii.

mysql数据库 myisam数据存储引擎 表由于索引和数据导致的表损坏 的修复 和检查

ⅰ亾dé卋堺 提交于 2020-03-14 08:29:25
一、mysqlcheck 进行表的检查和修复 1、检查mysqlisam存储引擎表的状态 #mysqlcheck -uuser -ppassword database table -c #检查单个表是否损坏 #mysqlcheck -uuser -ppassword database -c #检查整个库那些表损坏 2、首先检查数据库的那些表损坏,如果能定位到那张表损坏可以直接对表修复 #mysqlcheck -uuser -ppassword database table -r # 修复数据表 #mysqlcheck -uuser -ppassword database -r # 修复整个数据库 二、myisamchk 修复mysql表 Myisamchk是MyISAM表维护的一个非常实用的工具。可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。 Myisamchk 选项解释 –debug=debug_options, -# debug_options 输出调试记录文件。debug_options字符串经常是’d:t:o,filename’。 –silent,-s 沉默模式。仅当发生错误时写输出。 –wait, -w 如果表被锁定,不是提示错误终止,而是在继续前等待到表被解锁。

lombok的@builder 不能新建DO对象 Lombok存在的一些问题

大城市里の小女人 提交于 2020-03-13 23:01:08
1. 实体类加上 lombok的@builder之后 就不能新建对象了,,,构造函数被覆盖了? 加上两个标签之后解决 2.Lombok存在的一些问题 lombok问题 @Builder和@NoArgsConstructor同时使用时会报错 两个同时使用时需要加上@AllArgsConstructor全参构造函数 数据库对应实体的BO使用了@Builder必须要需要加上@NoArgsConstructor和@AllArgsConstructor 因为mybatis必须要有@NoArgsConstructor创建无参构造函数才能进行操作 实体类上如果有属性有初始化值需要在属性上加@Builder.Default @Accessors(chain = true)使用注意:使用了这个注解,clone对象不能被赋值 序列化问题 枚举加了@JsonSerialize(using = JsonEnumSerializer.class)注解,序列化时用jackson会报错,需要用fastJson 使用select... for update加悲观锁的sql语句必须加事务 spring中update操作会自动commit,select不会自动commit https://juejin.im/post/5ce6092ce51d4510b71da563 mysql 字段越多查询越慢

索引、视图、事务

谁都会走 提交于 2020-03-13 21:56:45
索引     是一个数据结构,用来查询数据库表的数据     主键索引:       primary key       作用:确认表中一条特定数据记录的位置,不能为空,一个表只有一个主键     外键索引:表中的一个字段(非主键)指向另一张表中的主键,称该字段为主键。       foreign key(外键名) references 主表(主键) ;       作用:多表查询时方便联系两表数据。限制:表类型必须是innodb(有约束效果)     唯一索引:确定某一列不能出现重复的值       unique     普通索引:       create index 索引名 on 表名(列名)     索引操作:       创建:create index 索引名 on 表名(列名)       查看:show index from 表名       删除:drop index 索引名 on 表名    视图     是一个虚拟的表,不占用物理内存、不存放数据,数据只存在基表中,相互影响     优点:简单、方便,查看数据更清楚;安全性:保护数据;不占物理内存     缺点:性能差;查询效率偏低,需要转换;修改限制:对于复杂视图(多表查询)修改是麻烦的     创建:create view 视图名 as select语句     查询:show creaw view 视图名

T-SQL查询进阶--深入浅出视图

纵然是瞬间 提交于 2020-03-13 12:58:11
视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata. 视图简单的理解如下: 通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。 为什么要使用视图(View) 从而我们不难发现,使用视图将会得到如下好处: 视图隐藏了底层的表结构,简化了数据访问操作 因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据 使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性 视图提供了一个用户访问的接口,当底层表改变后,改变视图的语句来进行适应,使已经建立在这个视图上客户端程序不受影响 视图(View)的分类 视图在SQL中可以分为三类 普通视图(Regular View) 索引视图(Indexed View) 分割视图(Partitioned View) 下面从这几种视图类型来谈视图 普通视图(Rugular View) 普通视图由一个Select语句所定义,视图仅仅包含其定义和被引用表的metadata.并不实际存储数据。MSDN中创建视图的模版如下: CREATE VIEW [ schema_name . ] view_name [ (column [ ,..

elasticsearch

六眼飞鱼酱① 提交于 2020-03-12 19:02:15
1.下载软件 https://elasticsearch.cn/download/ #点击上面的网址 下载rpm包 yum install elasticsearch-7.6.1-x86_64.rpm -y #安装 vi /etc/elasticsearch/elasticsearch.yml #修改以下配置 network.host: 0.0.0.0 #修改监听端口为全局 discovery.seed_hosts: ["host1"] systemctl restart elasticsearch.service #启动服务 测试访问 #能显示这个页面说明成功了 2.安装 elasticsearch-head等工具 #用Google浏览器的的应用商店搜索 #输入ip:9200访问 #安装advanced rest client https://www.sojson.com/ #一个在线转换json 格式化的工具 安装Postman 软件 https://dl.pstmn.io/download/latest/win64 #下载 win7 如果无法安装 就更新KB2533623补丁 3.1、创建非结构化索引 创建空索引: PUT /haoke { "settings": { "index": { "number_of_shards": "2",#分片数 "number_of

MySQL索引原理

房东的猫 提交于 2020-03-12 17:29:05
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。 二叉查找树 二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键值。 如下图所示就是一棵二叉查找树, 对该二叉树的节点进行查找发现深度为1的节点的查找次数为1,深度为2的查找次数为2,深度为n的节点的查找次数为n,因此其平均查找次数为 (1+2+2+3+3+3) / 6 = 2.3次 二叉查找树可以任意地构造,同样是2,3,5,6,7,8这六个数字,也可以按照下图的方式来构造: 但是这棵二叉树的查询效率就低了。因此若想二叉树的查询效率尽可能高,需要这棵二叉树是平衡的,从而引出新的定义——平衡二叉树,或称AVL树。 平衡二叉树(AVL Tree) 平衡二叉树(AVL树)在符合二叉查找树的条件下,还满足任何节点的两个子树的高度最大差为1。下面的两张图片,左边是AVL树,它的任何节点的两个子树的高度差<=1;右边的不是AVL树,其根节点的左子树高度为3,而右子树高度为1; 如果在AVL树中进行插入或删除节点,可能导致AVL树失去平衡

MYSQL 数据库索引

梦想的初衷 提交于 2020-03-12 17:05:07
索引概述 在MySQL中,索引由数据表中一列或多列组合而成,创建索引的目的是为了优化数据库的查询速度。其中,用户创建的索引指向数据库中具体数据所在位置。当用户通过索引查询数据库中的数据时,不需要遍历所有数据库中的所有数据。这样,大幅度提高了查询效率。 MySQL索引概述 1.索引是一种将数据库中单列或者多列的值进行排序的结构。应用索引,可以大幅度提高查询的速度。 2.用户通过索引查询数据,不但可以提高查询速度,也可以降低服务器的负载。 3.应用MySQL数据库时,并非用户在查询数据的时候,总需要应用索引来优化查询。 4.整体来说,索引可以提高查询的速度,但是会影响用户操作数据库的插入操作。 MySQL索引分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 创建索引 创建索引是指在某个表中至少一列中建立索引,以便提高数据库性能。其中,建立索引可以提高表的访问速度。本节通过几种不同的方式创建索引。其中包括在建立数据库时创建索引、在已经建立的数据表中创建索引和修改数据表结构创建索引。 在建立数据表时创建索引 在建立数据表时可以直接创建索引,这种方式比较直接,且方便、易用。 基本语法结构如下: create table table_name( 属性名 数据类型[约束条件], 属性名 数据类型[约束条件] …… 属性名 数据类型 [UNIQUE |