索引

PostgreSQL与MySQL对比

强颜欢笑 提交于 2020-03-06 11:59:32
都属于开放源码的一员,性能和功能都在高速地提高和增强。MySQL AB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。 PostgreSQL : 免费 原则: 对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会日益提供。而随着硬件性能的飞速提高,速度也不再是什么太大的问题。 1 架构对比 MySQL: 多线程 PostgreSQL: 多进程 多线程架构和多进程架构之间没有绝对的好坏,例如oracle在unix上是多进程架构,在windows上是多线程架构。 PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。 pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因) 2 对存储过程[1]及事务的支持能力 1) MySQL对于无事务的MyISAM表,采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新,而PostgreSQL不存在这样的问题。 2) PostgreSQL支持存储过程

主键索引和唯一索引的区别

北战南征 提交于 2020-03-06 10:29:50
-- 区别 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值 + 唯一索引了。 主键可以被其他表引用为外键,而唯一索引不能。 一个表最多只能创建一个主键,但可以创建多个唯一索引。 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。 在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。 -- 创建一张仅包含主键和唯一索引的表 CREATE TABLE test (PrimaryKey VARCHAR2(20), UniqueKey VARCHAR2(20) ); -- 分别创建主键和唯一索引,语法不同 ALTER TABLE test ADD CONSTRAINT test_PrimaryKey PRIMARY KEY (PrimaryKey); CREATE UNIQUE INDEX test_UniqueKey ON test (UniqueKey); -- 在 USER_INDEXES 中可以看到两个索引名称 SELECT table_name,table_type,index_name,index_type,uniqueness FROM USER_INDEXES WHERE

建立索引的好处和坏处

霸气de小男生 提交于 2020-03-06 09:42:39
好处: 1、帮助用户提高查询速度 2、利用索引的唯一性来控制记录的唯一性 3、可以加速表与表之间的连接 4、降低查询中分组和排序的时间 坏处: 1、存储索引占用磁盘空间 2、执行修改操作(insert、delete、update)产生索引维护 值得注意的是:没有索引的话,会全表查找,效率非常慢 索引可以建也可以不建,如果涉及查找,最好建索引。 来源: https://www.cnblogs.com/duStar96/p/12424757.html

传智播客课程——Lucene搜索引擎

孤街浪徒 提交于 2020-03-06 09:35:08
Lucene不是一个现成的程序,类似文件搜索程序或web网络爬行器或是一个网站的搜索引擎。Lucene是一个软件库,一个开发工具包,而不是一个具有完整特征的搜索应用程序。它本身只关注文本的索引和搜索。Lucene使你可以为你的应用程序添加索引和搜索能力。目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Eclipse 的帮助系统的搜索功能。 Lucene 采用的是一种称为反向索引(inverted index)的机制。反向索引就是说我们维护了一个词/短语表,对于这个表中的每个词/短语,都有一个链表描述了有哪些文档包含了这个词/短语。这样在用户输入查询条件的时候,就能非常快的得到搜索结果。 文档建立好索引后,就可以在这些索引上面进行搜索了。搜索引擎首先会对搜索的关键词进行解析,然后再在建立好的索引上面进行查找,最终返回和用户输入的关键词相关联的文档。 今天在传智播客的课堂上,汤阳光老师教我们实现了简单的Lucene搜索引擎,使我们能够对大量的文档实现不同需求的查找。以下是我的总结。 1. 准备环境:添加jar包 lucene-core-2.4.0.jar(核心); lucene-analyzers-2.4.0.jar(分词器); lucene-highlighter-2.4.0.jar(高亮器); 2. 构造IndexWriter

oracle常用sql语句语法

拈花ヽ惹草 提交于 2020-03-06 09:31:44
一.数据控制语句 (DML) 部分   1.INSERT   (往数据表里插入记录的语句)   INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);   INSERT INTO 表名(字段名1, 字段名2, ……)   SELECT 字段名1, 字段名2, …… FROM 另外的表名;   字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’   如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''.   字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.   日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒   或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)   TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.   年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS   INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,   方法借用ORACLE里自带的DBMS_LOB程序包.   INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号   CREATE SEQUENCE

mysql索引的数据结构

妖精的绣舞 提交于 2020-03-06 03:27:07
哈希索引:通过对键值进行一定的哈希算法得到新的哈希值,检索时不需要像btree那样从根节点到叶子节点逐级查找,而是通过哈希算法就可以快速定位到位置 btree和哈希结构的比较: 1、哈希结构的索引适合等值查询,前提是值唯一,因为会出现哈希碰撞的情况,就会导致找到具体的位置后,还得扫描链表 2、哈希结构不适合范围查找,原本有序的磁盘数据经过键值的哈希算法后可能试键值出现不连续,导致不能范围查找 3、哈希机构不适合排序、模糊查询、分组查询,因为这些本质上是范围查询 4、哈希结构不能遵循复合索引的最左原则 B-tree索引:是一个多路平衡搜索树,和二叉树的区别是二叉树每个节点只允许有两个子节点,而btree可以有多个节点 其特点是: 1、所有键值分布在整棵树中 2、任何一个关键字出现且只出现在一个节点中 3、一次查询可能未到叶子节点就可以查询结束,因为真实数据也存储在非叶子节点;性能逼近二分查找 B+tree也是一种多路平衡搜索树,它和B-tree的区别是: 1、B+tree存储的真实数据只在叶子节点 2、为所有叶子节点增加了一个链指针 为什么使用B+tree 1、B+树更适合外部存储,由于内节点无 data 域,一个结点可以存储更多的内结点,每个节点能索引的范围更大,也意味着 B+树单次磁盘IO的信息量大于B-树,I/O效率更高。 2、Mysql是一种关系型数据库

sql基本语法1(简单全面)

笑着哭i 提交于 2020-03-06 00:52:53
SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。 SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数据 INSERT INTO - 向数据库表中插入数据 CREATE DATABASE - 创建新数据库 ALTER DATABASE - 修改数据库 CREATE TABLE - 创建新表 ALTER TABLE - 变更(改变)数据库表 DROP TABLE - 删除表 CREATE INDEX - 创建索引(搜索键) DROP INDEX - 删除索引 select select * from Persons select lastName from Persons distinct 对查询的字段去重: SELECT DISTINCT 列名称 FROM 表名称 select distinct lastName from Persons ORDER BY 排序,默认为升序ASC;降序是DESC SELECT Company , OrderNumber FROM Orders ORDER BY Company DESC , OrderNumber ASC INSERT INTO 向表格中插入新的行: INSERT INTO 表名称 VALUES (值1, 值2,....) INSERT

七、 数组类型操作属性

不羁的心 提交于 2020-03-05 23:55:21
1. Array.of和new Array都可以创建一个新数组 | 区别:它们的区别在于当只设置一个参数的时候 | new Array:参数只有一个的时候,表示数组的长度 | Array of:参数只有一个的时候,表示数组只有一个元素且是传递的那个参数 2. 数组类型检测 | Array.isArray(参数):参数为所需要检测的数据 3. 数组类型转换为字符串 | .toString():大部分数据类型在调用该方法的时候,都会将其转换为字符串类型 | .Join(参数):此方法可以设置字符串之间的连接符号 | 参数是表示指定的连接符号,比如:"-" 4. Array.from(对象,回调函数) | 此方法可以将类数组转换为数组格式 | 什么是类数组? 就是具有"length"属性或者可以遍历迭代的对象,比如:字符串 | 这里的回调函数可以对数组里的每一个元素进行函数处理 5. 展开语法 | 使用"..."展开语法可以将NodeList转换为数组操作 6. 数组合并 | 方法一:利用展开语法 --> 类似于把一个数组元素都遍历出来在添加入另一个数组里 | let a = [1,2,3, ...数组对象]; | 方法二:.concat() | 数组A.concat(数组B) --> 返回值是数组A和数组B合并后的新数组 | let 数组C = 数组A.concat(数组B) | 注意

MySQL 存储引擎

非 Y 不嫁゛ 提交于 2020-03-05 22:35:28
存储引擎 DBMS使用存储引擎进行数据的创建、查询、更新、删除操作。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。 MySQL提供了多种存储引擎,最常见的有3种。 1、MyISAM MySQL5.5之前的默认的存储引擎, 每个MyISAM在磁盘上存储成三个文件,文件名和表名相同,扩展名分别是 (1)frm文件:存储表的定义 (2)MYD文件:存储表中的数据(记录) (3)MYI文件:存储索引。 索引保存的是数据文件的指针 特点 访问速度快(优) 支持全文索引(优)。但基本不使用MySQL的全文索引,全文索引一般都是使用第三方的ElasticSearch,Solr等更加成熟的解决方案。 不支持事务、外键(缺) 默认的锁粒度为表级锁,所以并发度很差(缺),但加锁快,锁冲突较少,不容易发生死锁(优); 对数据的查询缓存只缓存索引,不缓存数据(记录),而且使用的是操作系统本身的缓存。 自动增长列可以是组合主键中的任何一列。设置自动增长列:创建表时,在字段后加auto_increment,默认初始值是1 适用场景 不需要事务 不使用外键 操作以select、insert为主 MyISAM支持三种不同的存储格式 (1)静态表(fixed) 表中不能包含变长字段(比如VARCHAR, BLOB, TEXT),每个记录都是固定的长度

MySQL的SQL语句

☆樱花仙子☆ 提交于 2020-03-05 20:59:01
须知: SQL语言:结构化查询语言,是关系型数据库查询语言的标准,不同的数据库虽然有自己私有扩展,但关键词都支持:(select、update、delete、insert、where) SQL语句分类:像Oracle、MSSQL都是通用的 DDL:数据定义语言(create、alter、drop、rename) DML:数据库维护语言(select、insert、update、delete) DCL:数据库控制语言,权限(Grant、revoke) TCL:事务控制语言(commt、sarepqint):新型的语句 一、数据库增删改查 根据这个表结构以下来操作: select * from user; 基本操作 1.创建数据库 create database name; 2.删除数据库 drop database name; 3.创建一个用户表 create table user(id int,name varchar(30),pass varchar(30)); 4.插入数据 insert into user(id,name,pass) values("1","zhangsan","123"); 5.删除一个表 drop table user; 6.查看表字段 desc table user; 7.查看表数据 select * from user; 8.修改表名 rename