索引

SQL Server 填充因子

ぐ巨炮叔叔 提交于 2020-03-20 11:38:08
在创建聚集索引时,表中的数据按照索引列中的值的顺序存储在数据库的数据页中。在表中插入新的数据行或更改索引列中的值时,Microsoft® SQL Server™ 2000 可能必须重新组织表中的数据存储,以便为新行腾出空间,保持数据的有序存储。这同样适用于非聚集索引。添加或更改数据时,SQL Server 可能不得不重新组织非聚集索引页中的数据存储。向一个已满的索引页添加某个新行时,SQL Server 把大约一半的行移到新页中以便为新行腾出空间。这种重组称为页拆分。页拆分会降低性能并使表中的数据存储产生碎片。有关更多信息,请参见表和索引构架。 创建索引时,可以指定一个填充因子,以便在索引的每个叶级页上留出额外的间隙和保留一定百分比的空间,供将来表的数据存储容量进行扩充和减少页拆分的可能性。填充因子的值是从 0 到 100 的百分比数值,指定在创建索引后对数据页的填充比例。值为 100 时表示页将填满,所留出的存储空间量最小。只有当不会对数据进行更改时(例如,在只读表中)才会使用此设置。值越小则数据页上的空闲空间越大,这样可以减少在索引增长过程中对数据页进行拆分的需要,但需要更多的存储空间。当表中数据会发生更改时,这种设置更为适当。 提供填充因子选项是为了对性能进行微调。但是,使用 sp_configure 系统存储过程指定的服务器范围的默认填充因子,在大多数情况下都是最佳的选择。

SqlServer 填充因子的说明

南笙酒味 提交于 2020-03-20 11:37:47
CREATE NONCLUSTERED INDEX IX_d_name ON department(d_name) with fillfact or=30 使用 fill factor 选项可以指定 Microsoft SQL Server 2005 使用现有数据创建新索引时将每页填满到什么程度。由于在页填充时 SQL Server 必须花时间来拆分页,因此填充因子会影响性能。 仅在创建或重新生成索引时使用填充因子。页面不会维护在任何特定的填充水平上。 fill factor 的默认值为 0,有效值介于 0 和 100 之间。FILLFACTOR 设置为 0 或 100 时,叶级别几乎完全填满,但至少会保留一个其他索引行的空间。这样设置后,叶级别空间会得到有效利用,而且仍有空间可以在必须拆分页之前进行有限扩展。很少需要更改 fill factor 的默认值,因为可以使用 CREATE INDEX 或 ALTER INDEX REBUILD 语句来覆盖其对于指定索引的值。 注意: 填充因子的值 0 和 100 在所有方面都是相同的。 fill factor 选项是一个高级选项。如果使用 sp_configure 系统存储过程来更改该设置,则只有在 show advanced options 设置为 1 时才能更改 fill factor。设置在重新启动服务器后生效。

Docker部署ELK

烈酒焚心 提交于 2020-03-20 11:26:08
环境 centos 7.0(至少需要3G内存,该安装包较大) docker 19.0 ELK镜像 sebp/elk(7.6.0版本) Docker安装部署ELK   选择的是sebp/elk镜像,这里基本没有什么需要配置的,docker search elk 找到stars最多的pull下来。 docker pull sebp/elk   先把对应的文件都拷贝到宿主机当中 1.创建文件夹 mkdir /root/data/es/{conf,data} mkdir /root/data/logstash/config 2.在运行容器并且把容器里的配置cp到宿主机当中 docker run --tid --name elk sebp/elk docker cp -a elk:/opt/kibana/config/kibana.yml docker cp -a elk:/opt/logstash/config 3.然后删除刚才创建的容器 docker rm -f elk 1 .运行elk   pull下来之后,因为需要修改kibana配置,和logstash配置,所以把一些常用的配置挂载到容器目录 1.命令 docker run -tid -p 5601:5601 -p 5044:5044 -p 9200:9200 -p 9300:9300 \ -v /root/data/es/conf

MySQL为什么要给表加上主键

こ雲淡風輕ζ 提交于 2020-03-20 10:42:19
1.一个没加主键的表,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐. 2.一个加了主键的表,并不能被称之为「表」。如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,并且是「平衡树」结构,换句话说,就是整个表就变成了一个索引。没错,再说一遍,整个表变成了一个索引,也就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键,一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置。   import matplotlib.pyplot as plt      plt.rcParams[www.yongyunzhuce.cn'font.sans-serif']=['SimHei']      x_data = [2011,2012,2013,2014,2015,2016,2017]      y_data = [www.zhuyngyule.cn 58000,60200,63000,71000,84000,90500,107000]      plt.xticks(x_data, ['2011年','2012年','2013年','2014年','2015年','2016年','2017年'])      plt.yticks(y_data)      plt.plot(x_data,www

初始 Elasticsearch

∥☆過路亽.° 提交于 2020-03-20 10:32:38
Elasticsearch Elasticsearch 的工作原理是什么? 原始数据会从从多个来源(包括日志、系统指标和网络应用程序)输入到 Elasticsearch 中,数据采集指在 ElastIcsearch 中进行索引之前解析、标准化并充实这些原始数据的过程,这些数据在 ElasticSearch 中索引完成之后,用户便可针对数据运行复杂的查询,并使用聚合来检索自身数据的复杂汇总,在 Kibana 中,用户可以基于自己的数据创建强大的可视化,分享仪表板,并对 Elastic Stack 进行管理 Elasticsearch 的用途是什么? Elasticsearch 索引指相互关联的文档集合。 Elasticsearch 会以 JSON 文档的形式存储数据 。每个文档都会在一个组键(字段或属性的名称)和他们对应的值(字符串、数字、布尔值、日期、数值组、地理位置或其他类型的数据)之间建立联系 Elasticsearch 使用的是一种名为 倒排索引 的数据结构,这一结构的设计可以允许十分快速的进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档 在搜索过程中,Elasticsearch 会存储文档并构建倒排索引,这样用户便可以近实时地对文档数据进行搜索。索引过程是在索引 API 中启动的,通过此 API 您即可享特定索引中添加

MySQL为什么要给表加上主键

橙三吉。 提交于 2020-03-20 10:15:39
3 月,跳不动了?>>> 1.一个没加主键的表,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐. 2.一个加了主键的表,并不能被称之为「表」。如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,并且是「平衡树」结构,换句话说,就是整个表就变成了一个索引。没错,再说一遍,整个表变成了一个索引,也就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键,一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置。 3.给表中多个字段加上常规的索引,那么就会出现多个独立的索引结构.字段中的数据就会被复制一份出来,用于生成索引,叶子节点是主键ID,这也就是非聚集索引.,下面就是一个主键和三个常规索引的结构 4.通过主键去查,叶子节点就是数据行 5.通过其他索引字段去查,那么叶子节点是主键ID,然后再去根据主键查,聚集索引(主键)是通往真实数据所在的唯一路径 7.有一种例外可以不使用聚集索引就能查询出所需要的数据,这种非主流的方法称之为「覆盖索引」查询,也就是平时所说的复合索引或者多字段索引查询 以上内容希望帮助到大家, 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优

从源码和日志文件结构中分析 Kafka 重启失败事件

我是研究僧i 提交于 2020-03-20 09:14:13
3 月,跳不动了?>>> 上次的 Kafka 重启失败事件,对为什么重启失败的原因似乎并没有解释清楚,那么我就在这里按照我对 Kafka 的认识,从源码和日志文件结构去尝试寻找原因。 从源码中定位到问题的根源 首先把导致 Kafka 进程退出的异常栈贴出来: 注:以下源码基于 kafka 0.11.0.2 版本。 我们直接从 index 文件损坏警告日志的位置开始: kafka.log.Log#loadSegmentFiles 从前一篇文章中已经说到,Kafka 在启动的时候,会检查kafka是否为 cleanshutdown,判断依据为 ${log.dirs} 目录中是否存在 .kafka_cleanshutDown 的文件,如果非正常退出就没有这个文件,接着就需要 recover log 处理,在处理中会调用 。 在 recover 前,会调用 sanityCheck() 方法用于检验每个 log sement 的 index 文件,确保索引文件的完整性 ,如果发现索引文件损坏,删除并调用 recoverSegment() 方法进行索引文件的重构,最终会调用 recover() 方法: kafka.log.LogSegment#recover 源码中相关变量说明: log:当前日志 Segment 文件的对象; batchs:一个 log segment 的消息压缩批次;

Elasticsearch相关配置(二)

送分小仙女□ 提交于 2020-03-20 09:04:00
一、关于elasticsearch的基本概念 term   索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值。foo,Foo Foo几个单词是不相同的索引词。索引词(term)是可以通过term查询进行准确的搜索。 text   文本是一段普通的非结构化文字,通常,文本会被分析称一个个的索引词,存储在elasticsearch的索引库中,为了让文本能够进行搜索,文本字段需要事先进行分析;当对文本中的关键词进行查询的时候,搜索引擎应该根据搜索条件搜索出原文本。 analysis   分析是将文本转换为索引词的过程,分析的结果依赖于分词器,比如: FOO BAR, Foo-Bar, foo bar这几个单词有可能会被分析成相同的索引词foo和bar,这些索引词存储在elasticsearch的索引库中。当用 FoO:bAR进行全文搜索的时候,搜索引擎根据匹配计算也能在索引库中搜索出之前的内容。这就是elasticsearch的搜索分析。 cluster   代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。 node  

MySQL两种引擎的比较

老子叫甜甜 提交于 2020-03-20 05:14:49
MyISAM,InnoDB主要区别:    1.MyISAM是非事物安全的,InnoDB是事物安全的。     事物安全的特点为更安全,遇到问题会自动恢复或从备份加事物日志回复,如果更新失败,你的所有改变都变回原来。     非事物安全的优点为更快,所需的磁盘空间更小,执行更新时需要的内存更小,但是所有发生的改变都是永久的。   2.MyISAM锁的粒度是表级的,InnoDB支持行级锁以及表级,默认情况下是采用行级锁。      数据库引擎具有多粒度锁定,允许一个事务锁定不同类型的资源。 为了尽量减少锁定的开销,数据库引擎自动将资源锁定在适合任务的级别。 锁定在较小的粒度(例如行)可以提高并发度,但开销较高,因为如果锁定了许多行,则需要持有更多的锁。 锁定在较大的粒度(例如表)会降低了并发度,因为锁定整个表限制了其他事务对表中任意部分的访问。 但其开销较低,因为需要维护的锁较少。    3. MyISAM 支持全文类型索引,InnoDB不支持( 之前 ) 。     mysql索引有四种类型:主键索引、唯一索引、普通索引和全文索引。通过给字段添加索引可以提高数据的读取速度,提高项目的并发能力和抗压能力。索引优化是mysql中的一种优化方式。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。     主键索引: 主键是一种唯一性索引,但它必须指定为PRIMARY

HTML5 客户端数据库简易使用:IndexedDB

狂风中的少年 提交于 2020-03-19 14:18:35
IndexedDB介绍 IndexedDB是一种能在浏览器中持久的存储结构化数据的对象数据库,并且为web应用提供了丰富的查询能力。 相比于Web SQL数据库它更加简单,而且官方标准中关于Web SQL的工作已经停止。 相比于Web Storage,IndexedDB存储空间是无上限且永久的。 创建数据库 IndexedDB是按域名分配独立空间,一个独立域名下可以创建多个数据库,每个数据库可以创建多个对象存储空间(表/对象仓库),一个对象存储空间可以存储多个对象数据(索引的字段)。 1 2 3 4 5 6 7 8 9 10 11 function openDB(){ var request = indexedDB.open(dbName,dbVer);//如果数据库存在就打开,如果数据库不存在就去新建 request.onsuccess = function(e){ } request.onerror = function(e){ } //创建新数据库,或者数据库版本号被更改的时候出发onupgradeneeded事件,并执行回调函数 request.onupgradeneeded = function(e){ } } indexedDB.open方法用于创建数据库,里面传两个参数(数据库名,数据库版本),request.onupgradeneeded方法在创建新数据库