索引

Lucene 初识

柔情痞子 提交于 2020-03-24 14:20:45
因为业务需要,虽然自己不是专门写搜索的,但是需要自己拼一些搜索条件去调用搜索的接口,而之前看的JVM crash里也涉及到了Lucene,所以大概了解一下。 参考文档: http://www.iteye.com/topic/839504 http://www.cnblogs.com/xing901022/p/3933675.html 一、Lucene简介 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。 目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene 就能对你的文档进行索引和搜索。比如你要对一些 HTML 文档,PDF 文档进行索引的话你就首先需要把 HTML 文档和 PDF 文档转化成文本格式的,然后将转化后的内容交给 Lucene 进行索引,然后把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档的格式也使 Lucene 能够几乎适用于所有的搜索应用程序。

维护索引——通过重组索引提高性能

烂漫一生 提交于 2020-03-24 07:59:37
原文: 维护索引——通过重组索引提高性能 前言: 如果碎片程度小于30%,建议使用重组而不是重建。因为重组不会锁住数据页或者数据表,并且降低CPU的资源。 总得来说,重组会清空当前的B-TREE,特别是索引的叶子节点,重组数据页和消除碎片。和重建不同,重组不会添加任何新数据页。 准备工作: 为了了解是否有必要重组索引,需要首先查看碎片程度,如果在10%以下,那一般没必要做什么维护,如果在10%~30%,就建议进行重组。 步骤: 1、 以下各种重组索引的方法: --不指定参数重组索引: ALTER INDEX [idx_refno] ON [ordDemo] REORGANIZE GO --重组表中所有索引: ALTER INDEX ALL ON [ordDemo] REORGANIZE GO --使用DBCC INDEXDEFRAG重建表上所有索引: DBCC INDEXDEFRAG( 'AdventureWorks', 'ordDemo') GO --使用DBCC INDEXDEFRAG重组表上一个索引: DBCC INDEXDEFRAG( 'AdventureWorks', 'ordDemo', 'idx_refno') GO 2、 DBCC INDEXDEFRAG命令同样是后续不建议继续使用的命令。 分析: 索引重组,也可以称为碎片重组,对单独索引的操作将使用单独的线程

数字、布尔值、字符串、列表

限于喜欢 提交于 2020-03-24 06:44:46
基础数据类型 2.1数字int。 数字主要是用于计算用的,使用方法并不是很多,就记住一种就可以: #bit_length() 当十进制用二进制表示时,最少使用的位数 v = 11 data = v.bit_length() print(data) 2.2布尔值bool。 布尔值就两种:True,False。就是反应条件的正确与否。 真 1 True。 假 0 False。 2.3字符串str。 2.3.1、字符串的索引与切片。 索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推。 a = 'ABCDEFGHIJK' print(a[0]) print(a[3]) print(a[5]) print(a[7]) 切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则就是顾头不顾腚)。 a = 'ABCDEFGHIJK' print(a[0:3]) print(a[2:5]) print(a[0:]) #默认到最后 print(a[0:-1]) #-1就是最后一个 print(a[0:5:2]) #加步长print(a[5:0:-2]) #反向加步长 2.3.2、字符串常用方法。 1 #captalize,swapcase,title 2 print(name.capitalize()) #首字母大写 3 print(name.swapcase())

根据文件夹地址获取txt文件并获取txt内容索引

我是研究僧i 提交于 2020-03-24 06:23:43
本文章原创,引用转载请注明作者出处。 这两天写了一个小的C++程序,用的开发工具是visual studio。个人感觉Microsoft做的visual studio真心的很强大,推荐大家在开发c\c++,以及c#,asp.net等一些软件的时候可以使用visual studio. 说一下我开发的的程序效果:输入一个文件夹地址,程序可以遍历该文件夹以及该文件夹中所有子文件夹中文件,经过判断获取所有txt类型文件地址,并进入txt文件根据txt文件内容生成索引返回。之后用户可以输入关键字,程序返回所有包含该关键字的txt文件。 下图是程序的运行的效果图,因为改程序我以后主要是另外一个程序的一个功能模块,所以我并没有写程序Windows界面,没有意义。 下面说一下主要的代码组成:一个Chercher():根据输入的文件夹地址遍历所有文件夹及该文件夹中子文件夹中的所有文件,就是说该文件夹中的一切文件,并且获取txt文件。 一个Indexation():进入txt文件,根据内容获取索引关键字做成索引 一个SearchReturn():根据用户输入的要查找的关键字进入索引查找,找到就返回txt文件地址 一个DisplayErrorBox():主要处理程序运行过程中出现的错误 当然还有就是主函数,控制整个程序的循环运行。下面我把每个功能函数截图贴出来: Chercher()截图:

图解MySQL索引--B-Tree(B+Tree)

谁说我不能喝 提交于 2020-03-23 22:45:28
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门: https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ 看了很多关于索引的博客,讲的大同小异。但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等结构,导致在面试的时候答非所问! 索引是什么? 索引是帮助MySQL高效获取数据的数据结构。 索引能干什么? 提高数据查询的效率。 索引:排好序的快速查找数据结构!索引会影响where后面的查找,和order by 后面的排序。 一、索引的分类 1️⃣从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。 2️⃣从应用层次来分:普通索引,唯一索引,复合索引 3️⃣根据中数据的物理顺序与键值的逻辑(索引)顺序关系:聚集索引,非聚集索引。 1️⃣中所描述的是索引存储时保存的形式,2️⃣是索引使用过程中进行的分类,两者是不同层次上的划分。不过平时讲的索引类型一般是指在应用层次的划分。 就像手机分类:安卓手机,IOS手机

图解MySQL索引--B-Tree(B+Tree)

拜拜、爱过 提交于 2020-03-23 22:11:31
3 月,跳不动了?>>> 【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 看了很多关于索引的博客,讲的大同小异。但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等结构,导致在面试的时候答非所问! 索引是什么? 索引是帮助MySQL高效获取数据的数据结构。 索引能干什么? 提高数据查询的效率。 索引:排好序的快速查找数据结构!索引会影响where后面的查找,和order by 后面的排序。 一、索引的分类 1️⃣从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。 2️⃣从应用层次来分:普通索引,唯一索引,复合索引 3️⃣根据中数据的物理顺序与键值的逻辑(索引)顺序关系:聚集索引,非聚集索引。 1️⃣中所描述的是索引存储时保存的形式,2️⃣是索引使用过程中进行的分类,两者是不同层次上的划分。不过平时讲的索引类型一般是指在应用层次的划分。 就像手机分类:安卓手机,IOS手机 与 华为手机,苹果手机,OPPO手机一样。 普通索引 :即一个索引只包含单个列,一个表可以有多个单列索引 唯一索引 :索引列的值必须唯一,但允许有空值 复合索引 :即一个索引包含多个列 **聚簇索引

读懂MySQL执行计划

让人想犯罪 __ 提交于 2020-03-23 18:51:14
原文:https://mp.weixin.qq.com/s/-BlLvBKcF-yalELY7XkqaQ 前言 在之前的面试过程中,问到执行计划,有很多童鞋不知道是什么?甚至将执行计划与执行时间认为是同一个概念。今天我们就一起来了解一下执行计划到底是什么?有什么用途? 执行计划是什么? 执行计划,简单的来说,是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。在MySQL中使用 explain 关键字来查看。如下所示: 1.查询t_base_user select * from t_base_user where name="andyqian"; 2.查看上述语句的执行计划 explain select * from t_base_user where name="andyqian"; 执行查看上述2语句后,我们可以得出以下执行计划 上面这个执行计划给到的信息是: 这是一个简单的SQL,全表扫描,共扫描1行,Using where条件在t_base_user表中筛选出记录。发现该语句并没有走索引,为什么是这样的呢?别急,我们紧接着看下一节。上面执行计划是什么意思呢?有什么参考价值呢? 读懂执行计划 通过上面,我们知道了什么是执行计划,也看到了执行计划到底是什么东西,现在我们来具体了解一下,MySQL执行计划中,每个属性代表的是什么意思? 我们一一来介绍

索引碎片维护

一曲冷凌霜 提交于 2020-03-23 18:39:31
一、 设计目标。 定期描述指定数据库中表或视图的索引碎片并对合符整理要求的索引进行 REBUILD 或 REORGANIZE 操作。 二、 设计说明。 数据表在添加、更新、删除操作中会产生索引碎片,导致查询速度变慢,特别是查询大型数据表时更为明显,所以需要对某些重要的表进行定期索引扫描并针对合符要求的索引进行重组或重建工作。 整理索引碎片的方法如下: 1 、 Drop 原来的索引再重建这些索引,这种方法的优点是索引彻底重建,达到最理想的状况。但是这此会阻塞所有的查询,最好是在索引碎片十分严重,并且使用 REBUILD 无法达到效果的情况下使用。注意:使用 DROP_EXISTING 子句,可以避免 non-clustered index 被重建两次。 2 、 ALTER INDEX ...... REORGANIZE 重组索引。 使用最少系统资源重新组织索引 , 重新组织还会压缩索引页。可以在数据库 online 的情况下执行,但是整理不够彻底。 3 、 ALTER INDEX ...... REBUILD 重新生成索引。 重新生成索引将会删除并重新创建索引。这将根据指定的或现有的填充因子设置压缩页来删除碎片、回收磁盘空间,然后对连续页中的索引行重新排序。该方法在一个事务中完成操作,在数据文件中需要有足够的 free space 来满足将所有的索引及相关的一些对象进行重建

MySql存储引擎介绍

半世苍凉 提交于 2020-03-23 13:01:28
MySQL5.5以后默认使用 InnoDB 存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表。 若要修改默认引擎,可以修改配置文件中的default-storage-engine。可以通过:show variables like 'default_storage_engine';查看当前数据库到默认引擎。命令: show engines 和 show variables like 'have%' 可以列出当前数据库所支持到引擎。其中Value显示为disabled的记录表示数据库支持此引擎,而在数据库启动时被禁用。在MySQL5.1以后,INFORMATION_SCHEMA数据库中存在一个ENGINES的表,它提供的信息与show engines;语句完全一样,可以使用下面语句来查询哪些存储引擎支持事物处理:select engine from information_chema.engines where transactions = 'yes'; 可以通过engine关键字在创建或修改数据库时指定所使用到引擎。 主要存储引擎:MyISAM、InnoDB、MEMORY和MERGE介绍: 在创建表到时候通过 engine=... 或 type=... 来指定所要使用到引擎。 show table status from DBname 来查看指定表到引擎

38 是否要使用memory引擎的表

£可爱£侵袭症+ 提交于 2020-03-23 12:47:00
38 是否要使用 memory 引擎的表 内存表的数据组织结构 create table t1(id int primary key, c int) engine=Memory; create table t2(id int primary key, c int) engine=innodb; insert into t1 values(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(0,0); insert into t2 values(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(0,0); 可以看到,内存表 t1 的返回结果里面 0 在最后一行,在 innodb 表 t2 的返回结果, 0 在第一行,二者的差别要从他们的 主键索引 的组织方式说起。 表 t2 是 innodb 表,是主键索引 id 的方式, innodb 表的数据放在主键索引树上,是一个 B+ tree ,如下 主键索引上的值是 有序 存储的,在 select * 的时候,就会按照叶子节点上从左往右扫描,所以结果里 0 在第一行。 与 innodb 不同, memory 引擎的数据和索引是分开的, 可以看到,内存表的数据部分以数组的方式单独存放,而主键 id 索引里,存的是每个数据的位置