mysql创建索引

搜索引擎1

时间秒杀一切 提交于 2019-12-05 02:20:36
lucene 和 es 的前世今生 lucene 是最先进、功能最强大的搜索库。如果直接基于 lucene 开发,非常复杂,即便写一些简单的功能,也要写大量的 Java 代码,需要深入理解原理。 elasticsearch 基于 lucene ,隐藏了 lucene 的复杂性,提供了简单易用的 restful api / Java api 接口(另外还有其他语言的 api 接口)。 · 分布式的文档存储引擎 · 分布式的搜索引擎和分析引擎 · 分布式,支持 PB 级数据 es 的核心概念 Near Realtime 近实时,有两层意思: · 从写入数据到数据可以被搜索到有一个小延迟(大概是 1s ) · 基于 es 执行搜索和分析可以达到秒级 Cluster 集群 集群包含多个节点,每个节点属于哪个集群都是通过一个配置来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常。 Node 节点 Node 是集群中的一个节点,节点也有一个名称,默认是随机分配的。默认节点会去加入一个名称为 elasticsearch 的集群。如果直接启动一堆节点,那么它们会自动组成一个 elasticsearch 集群,当然一个节点也可以组成 elasticsearch 集群。 Document & field 文档是 es 中最小的数据单元,一个 document 可以是一条客户数据

PHP面试题汇总

别说谁变了你拦得住时间么 提交于 2019-12-05 02:02:31
1、酒店预订怎么实现?怎么设计表 你好,我大概的说下我们的业务流程,我们的业务流程是:用户在网站浏览酒店信息,可以根据地区检索出该地区的酒店信息。列表展示酒店的信息由:酒店的名称,酒店图片,酒店位置,评论人数,评论分数以及最低入住价格。用户选中要入住的酒店进入酒店详情页面,查看酒店的介绍以及酒店的房型列表,用户根据他要入住的时间和离店的时间,检索出这个时间段内的所有可选房型(房间数量-当天的订单-当天未离店订单=剩余房间数量)显示给用户。用户选择好房型后就可以进行下单,要求有订单的开始时间,结束时间,房间数量,住客姓名,抵店时间,联系方式,备注信息等等。 那我的表是这么设计的,总共有6张表,分别是: 用户表user,里面有下面几个字段,(用户编号,用户名称,用户密码,用户联系方式) 酒店表hotel,里面有(酒店编号,酒店名称,酒店图片,评论人数,评论分数,最低入住价格,所在地区) 酒店图片表pic(图片编号,图片地址,图片排序,图片所属酒店) 评论表comment(评论编号,评论内容,评论时间,用户编号,酒店编号) 房型表house(房型编号,床型,早餐,宽带,人数上限,房价,房间数量,最长预定时间) 订单表order(订单编号,开始时间,结束时间,房间数量,住客姓名,最晚抵店时间,联系电话,使用优惠券,备注,订单状态) 以上就是我对这个酒店预订系统的设计 2

索引

那年仲夏 提交于 2019-12-05 01:07:12
索引是为了提高数据查询的效率,就像书的目录一样。 索引的常见模型 索引的出现是为了提高查询效率,但是实现索引的方式却有很多种。   1. 哈希表     哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算   成一个确定的位置,然后把 value 放在数组的这个位置。     缺点:不是有序的,区间查询全部扫描。哈希表这种结构适用于只有 等值查询 的场景     多个 key 值经过哈希函数的换算,会出现同一个值的情况。处理这种情况的一种方法是,拉出一个链表。(类似hashmap)     示例:一个身份证信息和姓名的表,需要根据身份证号查找对应的名字。          假设,这时候你要查 ID_card_n2 对应的名字是什么,处理步骤就是:首先,将 ID_card_n2 通过哈希函数算出 N;然后,按顺序遍历,找到 User2。     图中四个 ID_card_n 的值并不是递增的,这样做的好处是增加新的 User 时速度会很快,只需要往后追加。但缺点是,因为不是有序的,所以哈希索引做 区间查询的速度是很慢的 (全部扫描)。   2. 有序数组     等值查询和范围查询场景中的性能就都很好。有序数组索引只适用于 静态存储引擎 。

索引篇

喜你入骨 提交于 2019-12-05 01:01:55
索引篇 MySQL中的索引分为很多种,具体如下: 1、普通索引 2、唯一性索引 3、全文索引 4、单列索引 5、多列索引 6、空间索引 其作用就是提高表中数据的查询速度。 创建索引的 方式 有 三种 ,具体如下: 一、创建表的时候创建索引 二、使用CREATE INDEX 语句在已经存在的表上创建索引 三、使用ALTER TABLE语句在已经存在表上创建索引 格式: CREATE TABLE + 表名+(字段名 数据类型[完整性约束条件], 字段名 数据类型[完整性约束条件], ......              字段名 数据类型             [UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [别名] (字段名1 [(长度)]) [ASC|DESC]) ); 注: 格式中【】中的内容均 可省略 ! 关于上述语法的相关解释具体如下: UNIQUE : 可选参数,表示唯一性约束 FULLTEXT : 可选参数,表示全文约束 SPATIAL : 可选参数,表示空间约束 INDEX 和 KEY :用来表示字段的索引,二者选一即可 别名 :可选参数,表示创建的索引的名称 字段名 1:指定索引对应字段的名称 长度 :可选参数,用于表示索引的长度 ASC 和 DESC :可选参数,其中, ASC 表示 升序 排列, DESC 表示 降序 排列 1

mysql-索引

做~自己de王妃 提交于 2019-12-04 23:44:13
索引 主键索引: create table 的时候创建 primary key ,主键字段不允许重复,且不能为NULL(primary key自限制) KEY标志为 KEY 唯一索引(unique) :字段值不允许重复,但可为 NULL,KEY标志为 UNI 普通索引 :字段值无约束,KEY标志为 MUL 查看索引: desc class; #查看表结构 看key值 KEY主 UNI唯一 MUL普通 没有index是空的 show index from class; 创建索引: 1 create table 表名( 字段名 数据类型, index(字段名), #(默认索引名等于字段名) unique(字段名) ); 2 alter table class add index(name); alter table class 增加 索引(字段); #(默认索引名等于字段名) 3 create index name on class(name); create [unique] index 索引名 on 表名(字段名); 4 alter table 表名 add primary key(id); #增加主键索引 删除索引: drop [unique] index 索引名 on 表名; alter table class drop index name; 来源: https://www

数据库优化方案整理

有些话、适合烂在心里 提交于 2019-12-04 23:05:13
一:优化说明 A:有数据表明,用户可以承受的最大等待时间为8秒。数据库优化策略有很多,设计初期,建立好的数据结构对于后期性能优化至关重要。因为数据库结构是系统的基石,基础打不好,使用各种优化策略,也不能达到很完美的效果。 B:数据库优化的几个方面 ​​ 可以看出来,数据结构、SQL、索引是成本最低,且效果最好的优化手段。 C:性能优化是无止境的,当性能可以满足需求时即可,不要过度优化。 二:优化方向 1. SQL以及索引的优化 首先要根据需求写出结构良好的SQL,然后根据SQL在表中建立有效的索引。但是如果索引太多,不但会影响写入的效率,对查询也有一定的影响。 2. 合理的数据库是设计 根据数据库三范式来进行表结构的设计。设计表结构时,就需要考虑如何设计才能更有效的查询。 数据库三范式: 第一范式:数据表中每个字段都必须是不可拆分的最小单元,也就是确保每一列的原子性; 第二范式:满足一范式后,表中每一列必须有唯一性,都必须依赖于主键; 第三范式:满足二范式后,表中的每一列只与主键直接相关而不是间接相关(外键也是直接相关),字段没有冗余。 注意:没有最好的设计,只有最合适的设计,所以不要过分注重理论。三范式可以作为一个基本依据,不要生搬硬套。 有时候可以根据场景合理地反规范化: A:分割表。 B:保留冗余字段。当两个或多个表在查询中经常需要连接时,可以在其中一个表上增加若干冗余的字段

Elasticsearch----补

99封情书 提交于 2019-12-04 21:55:09
一、集群信息查看 GET /_cluster/health GET _cat/health?v 查看集群健康状况,status="green":表示每个索引的primary shard和replica shard都是active状态的                              ="yellow": 表示每个索引的primary shard是active,但是部分replica shard都是不是active状态的                              ="red":表示不是所有索引的primary shard是active,部分索引有数据丢失。 GET _cat/indices?v 快速查看集群中索引的情况 PUT /index_test?pretty 新建索引 index_test:测试的索引名 DELETE /index_test 删除index_test索引 二、使用(我们可以使用Postman访问接口) 1、创建索引库(用于集群时候的设置) put http://localhost:9200/xc_course //索引库名称 { "settings":{ "index":{ "number_of_shards":1, "number_of_replicas":0 } } } number_of_shards:设置分片的数量

Mysql(2)

南楼画角 提交于 2019-12-04 21:16:50
数据库事务(Database Transaction): 是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 简单的说:事务就是将一堆SQL(通常是增删改操作)的执行绑在一起,要么都执行成功,要么都执行失败,即都执行成功才算成功,否则就会恢复到这堆SQL执行之前的状态。 事务的四大特性(ACID): (1) 原子性 (Atomicity):事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。 (2) 一致性 (Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号金额之和应该是不变的。 (3) 隔离性 (Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。也就是说,在事中务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据. (4) 持久性 (Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。 MySQL中的事务: 开启事务:start transaction; 结束事务:commit(提交事务

MySQL常用命令

二次信任 提交于 2019-12-04 20:37:19
/* 启动 MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录 MySQL */ mysqld --skip-grant-tables -- 修改 root 密码 密码加密函数 password() update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES -- /* 数据库操作 */ ------------------ -- 查看当前数据库 select database(); -- 显示当前时间、用户名、数据库版本 select now(), user(), version(); -- 创建库 create database[ if not exists] 数据库名 数据库选项 数据库选项: CHARACTER SET charset_name COLLATE collation_name -- 查看已有库 show databases[ like 'pattern'] -- 查看当前库信息 show create database 数据库名 -- 修改库的选项信息 alter database 库名 选项信息 -- 删除库 drop

java面试(一)Mysql优化

*爱你&永不变心* 提交于 2019-12-04 18:55:14
一、常用mysql知识 (一)查询语句优化 1.避免非操作符的使用,NOT、<>数据库系统不会使用索引。 2.避免对查询的列的操作,任何对列操作都可能导致全表扫描,包括数据库函数、技术表达式等。尽可能将操作移至等式右边 3.避免不必要的类型转换 4.增加查询的范围限制 5.合理使用IN和EXIST 6.尽量去掉<> 7.去掉WHERE字句中的IS NULL和IS NOT NULL,不会使用索引而进行全表搜索。 8.尽量不要使用前导模糊查询,前导模糊查询不能利用索引。 9.SELECT字句中避免使用‘*’ 10.规范所有的SQL关键之的书写,不要大小写混用 (二) exists与in    1.区别:in是把外表和内表作为hash连接,而exist是对外表做loop循环,每次loop循环再对内表进行查询。如果两个表大小相当,in或exists都可以,如果一大一小,子查询大表用exists,子查询小表用in    2.not in 与not exist:如查询语句使用了not in那么内外表都进行全表扫描,没用到索引,而not exists子查询依然能用到表上索引,所以无论哪个表大,用not exists都比not in要快。 (三) 事物隔离级别 1) 幻读    事物1读取一条指定where数据之后,事物2插入一条符合where条件的数据,事物1使用相同条件再次查询