mysql创建索引

Sphinx + Coreseek 实现中文分词搜索

自古美人都是妖i 提交于 2020-01-25 16:51:25
Sphinx + Coreseek 实现中文分词搜索 Sphinx Coreseek 实现中文分词搜索 全文检索 1 全文检索 vs 数据库 2 中文检索 vs 汉化检索 3 自建全文搜索与使用Google等第三方站点提供的站内全文搜索的差别 Sphinx Coreseek介绍 Coreseek安装使用 1. 全文检索 1.1 全文检索 vs. 数据库 全文检索是数据库的有力补充,全文检索并不能替代数据库在应用系统中的作用。当应用系统的数据以大量的文本信息为主时,採用全文检索技术能够极大的提升应用系统的价值。 数据库搜索。假设搜索范围包含所有正文数据。往往性能非常低。用户响应时间长(分钟级。常常超时);而全文检索能够在0.x秒(毫秒级)的时间内将结果反馈给用户; 数据库搜索。一个用户在搜索。往往影响其它用户的相应用系统进行操作。全文检索能够同一时候支持多个用户并发搜索,其它相应用系统进行操作的用户不受影响。 数据库搜索非常难实现多个关键字的复合搜索。而全文检索能够实现多个关键词的复合搜索。包含 “和(AND)”、“或(OR)”、“否(NOT)” 等; 数据库搜索难于对结果进行相关度排序,当检索结果多时。用户往往难于找到最恰当的文档。而全文检索通过统计的研究成果。能够将文档进行相关度排序后。再返回给用户,提高用户的效率; 全文检索还能够对检索结果的数据进行聚类分析(Group,

MongoDB快速入门

泪湿孤枕 提交于 2020-01-25 16:36:07
从我第一次听到Nosql这个概念到如今已经走过4个年头了,但仍然没有具体的去做过相应的实践。最近获得一段学习休息时间,购买了Nosql技术实践一书,正在慢慢的学习。在主流观点中,Nosql大体分为4类, 键值存储数据库,列存储数据库,文档型数据库,图形数据库 。 今天主要快速的浏览了文档型数据库中目前市场占有率的最高的MongoDB数据库。记得初次见到和关注这个数据库还是我刚来上海的时候,公司将该数据库作 为新建的项目管理系统的后台数据库,当时还是很向往的,只是无缘参与那个项目,也就一直没有和该数据库打上交道。接下来简单的介绍下该数据库的基本原理和 相关应用,也算是巩固知识和加强记忆了。大体上快速学习分为两部分,第一部分为基础,第二部分为进阶。 优势与不足    首 先,MongoDB不需要表结构,它是模式自由的(schema-free),例如{"welcome", "Shanghai"}, {"name", "bibi"}可以放到同一个集合中。那么它是如何在存储数据的呢?MongoDB在保存数据时会使用Bson的形式,一种json的二进制化形式,并把 它与特定的Key进行关联。这样将非常便于程的扩展和维护,在需要增加新字段或者修改字段时只需要修改程序,而不需要修改数据库的架构,非常的方便。   其 次,MongoDB原生的提供很强的伸缩性,对于web应用

面试常考的mysql知识点

混江龙づ霸主 提交于 2020-01-25 14:44:28
秋招之后,部门又来了好多小鲜肉,其中有部分同学是没有用过MySQL的,我把自己以前做过的笔记又重新整理了一番,希望能够对新同学有帮助! 什么是DML、DDL、DCL? DML (data manipulation language): 它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是 用来对数据库里的数据进行操作的语言 DDL (data definition language):主要的命令有CREATE、ALTER、DROP等, DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用 DCL (Data Control Language):是 数据库控制功能。 是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句 。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL TCL (Transaction Control Language): 事务控制语言 ,包括:set transaction\rollback\savepoin MySQL常用命令 DDL 创建数据库 create database 数据库名; 查看数据库列表 show databases;

【MySQL】项目中常用的 18 条 MySQL 优化 打造高性能 SQL 语句

微笑、不失礼 提交于 2020-01-25 06:21:28
1. 执行计划EXPLAIN 要想做MySQL优化,首先必须知道如何善用执行计划EXPLAIN。下图做个简单的示例并标注需要重点关注的数据。 type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别 key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式 key_len列,索引长度 rows列,扫描行数。该值是个预估值 Extra列,详细说明。注意常见的不太友好的值有:Using filesort, Using temporary 关于EXPLAIN的详细分析,可以阅读另一篇文章: 【MySQL】执行计划EXPLAIN详解 2. SELECT语句务必指明字段名称 SELECT *增加很多不必要的消耗(cpu、io、内存、网络带宽);增加了使用覆盖索引的可能性;当表结构发生改变时,前断也需要更新。所以要求直接在select后面接上字段名。 3. 如果排序字段没有用到索引,就尽量少排序 4. 当只需要一条数据的时候,使用LIMIT 1 这是为了使EXPLAIN中type列达到const类型 5. SQL语句中IN包含的值不应过多 MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。再例如:select id from table_name

B-Tree 和 B+Tree 结构及应用,InnoDB 引擎, MyISAM 引擎

為{幸葍}努か 提交于 2020-01-24 22:01:29
1.什么是B-Tree 和 B+Tree,他们是做什么用的? B-Tree是为了磁盘或其它存储设备而设计的一种 多叉平衡查找树 ,B-Tree 和 B+Tree 广泛应用于文件存储系统以及 数据库 系统中。 在大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,树的高度就会增大,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于 树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下 (为什么会出现这种情况?这跟外部存储器-磁盘的存储方式有关)。那么该如何减少树的高度呢?一个基本的想法就是:采用 多叉树 结构(每个节点存放多个元素,每个节点有多个子节点,这样树的高度就降低了)。根据平衡二叉树的启发,自然就想到平衡多路查找树结构。B-Tree的各种操作能使B-Tree保持较低的高度,从而达到有效避免磁盘过于频繁的查找存取操作,从而有效提高查找效率。 2.B-Tree 2.1定义 m阶B-Tree满足以下条件: 1、每个节点最多拥有m个子树 2、根节点至少有2个子树 3、分支节点至少拥有m/2颗子树(除根节点和叶子节点外都是分支节点) 4、所有叶子节点都在同一层 5、每个节点最多可以有m-1个key 6、每个节点中的key以升序排列 7、节点中key元素左节点的所有值都小于或等于该元素

MySQL开发规范

只愿长相守 提交于 2020-01-24 15:25:01
MySQL开发规范 基于阿里数据库设计规范扩展而来 : https://yq.aliyun.com/articles/709387 参考,58到家MySQL军规升级版 : https://www.jianshu.com/p/c077581693fb 基础规范 表存储引擎必须使用InnoDB MySQL常见的三种存储引擎(storage_engine) : InnoDB、MyISAM、MEMORY 存储引擎就是指 表的类型以及表在计算机上的存储方式 通过“SHOW ENGINES”语句来查看 MySQL中的存储引擎 特性 innoDB MyISAM Memory 事务安全 支持 无 无 存储限制 64T 有 有 空间使用 高 低 低 内存使用 高 低 高 插入数据的速度 低 高 高 读取数据的速度 低 高 高 对外键的支持 支持 无 无 全文索引 不支持 支持 InnoDB存储引擎 InnoDB给MySQL的表提供了 事务处理 、 回滚 、 崩溃修复能力 和 多版本并发控制 的事务安全 InnoDB存储引擎总支持 AUTO_INCREMENT 。自动增长列的值不能为空,并且值必须唯一。MySQL中规定自增列必须为主键 InnoDB还支持 外键(FOREIGN KEY) 。外键所在的表叫做子表,外键所依赖(REFERENCES)的表叫做父表,父表中被子表外键关联的字段必须为主键。

B-Tree 和 B+Tree 结构及应用,InnoDB 引擎, MyISAM 引擎

烂漫一生 提交于 2020-01-24 14:11:00
1.什么是B-Tree 和 B+Tree,他们是做什么用的? B-Tree是为了磁盘或其它存储设备而设计的一种 多叉平衡查找树 ,B-Tree 和 B+Tree 广泛应用于文件存储系统以及数据库系统中。 在大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,树的高度就会增大,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于 树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下 (为什么会出现这种情况?这跟外部存储器-磁盘的存储方式有关)。那么该如何减少树的高度呢?一个基本的想法就是:采用 多叉树 结构(每个节点存放多个元素,每个节点有多个子节点,这样树的高度就降低了)。根据平衡二叉树的启发,自然就想到平衡多路查找树结构。B-Tree的各种操作能使B-Tree保持较低的高度,从而达到有效避免磁盘过于频繁的查找存取操作,从而有效提高查找效率。 2.B-Tree 2.1定义 m阶B-Tree满足以下条件: 1、每个节点最多拥有m个子树 2、根节点至少有2个子树 3、分支节点至少拥有m/2颗子树(除根节点和叶子节点外都是分支节点) 4、所有叶子节点都在同一层 5、每个节点最多可以有m-1个key 6、每个节点中的key以升序排列 7、节点中key元素左节点的所有值都小于或等于该元素

mysql性能优化

旧街凉风 提交于 2020-01-24 13:46:15
数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情 1.为查询缓存优化你的查询 mysql> show variables like '%query_cache%'; (query_cache_type 为 ON 表示已经开启) +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 20971520 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 如果不是ON,修改配置文件以开启查询缓存: > vi /etc/my.cnf [mysqld]中添加: query_cache_size = 20M #缓存的大小

【MySQL】执行计划EXPLAIN详解

二次信任 提交于 2020-01-24 13:18:54
首先来看下EXPLAIN执行计划包含的信息: 其中最重要的字段有 type、key、key_len、rows、Extra 。 本篇接下来将对字段进行详细的分析。 分析之前先创建表格测试: -- ---------------------------- -- Table structure for cps_commodity_info -- ---------------------------- CREATE TABLE ` cps_commodity_info ` ( ` id ` bigint ( 20 ) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键' , ` sku_id ` varchar ( 20 ) COLLATE utf8mb4_bin NOT NULL DEFAULT '0' COMMENT '商品skuId' , ` sku_name ` varchar ( 100 ) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '商品名称' , ` price ` decimal ( 10 , 2 ) NOT NULL DEFAULT '0.00' COMMENT '商品价格' , ` is_on_top ` tinyint ( 4 ) NOT NULL DEFAULT '0'

B-Tree 和 B+Tree 结构及应用,InnoDB 引擎, MyISAM 引擎

吃可爱长大的小学妹 提交于 2020-01-23 23:45:30
1.什么是B-Tree 和 B+Tree,他们是做什么用的? B-Tree是为了磁盘或其它存储设备而设计的一种 多叉平衡查找树 ,B-Tree 和 B+Tree 广泛应用于文件存储系统以及数据库系统中。 在大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,树的高度就会增大,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于 树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下 (为什么会出现这种情况?这跟外部存储器-磁盘的存储方式有关)。那么该如何减少树的高度呢?一个基本的想法就是:采用 多叉树 结构(每个节点存放多个元素,每个节点有多个子节点,这样树的高度就降低了)。根据平衡二叉树的启发,自然就想到平衡多路查找树结构。B-Tree的各种操作能使B-Tree保持较低的高度,从而达到有效避免磁盘过于频繁的查找存取操作,从而有效提高查找效率。 2.B-Tree 2.1定义 m阶B-Tree满足以下条件: 1、每个节点最多拥有m个子树 2、根节点至少有2个子树 3、分支节点至少拥有m/2颗子树(除根节点和叶子节点外都是分支节点) 4、所有叶子节点都在同一层 5、每个节点最多可以有m-1个key 6、每个节点中的key以升序排列 7、节点中key元素左节点的所有值都小于或等于该元素