mysql创建索引

Redis

99封情书 提交于 2019-11-29 16:17:14
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 一、Redis安装和基本使用 wget http://download.redis.io/releases/redis-3.0.6.tar.gz tar xzf redis-3.0.6.tar.gz cd redis-3.0.6 make 启动服务端 src/redis-server 启动客户端 src/redis-cli redis> set foo bar OK redis> get foo "bar" 二、Redis的特性 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2)

大数据量时Mysql的优化要点

空扰寡人 提交于 2019-11-29 14:01:37
如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。 虽然关系型数据库在海量数据中逊色于NoSQL数据库,但是如果你操作正确,它的性能还是会满足你的需求的。针对数据的不同操作,其优化方向也是不尽相同。对于数据移植,查询和插入等操作,可以从不同的方向去考虑。而在优化的时候还需要考虑其他相关操作是否会产生影响。就比如你可以通过创建索引提高查询性能,但是这会导致插入数据的时候因为要建立更新索引导致插入性能降低,你是否可以接受这一降低那。所以,对数据库的优化是要考虑多个方向,寻找一个折衷的最佳方案。 一:查询优化 1:创建索引。 最简单也是最常用的优化就是查询。因为对于CRUD操作,read操作是占据了绝大部分的比例,所以read的性能基本上决定了应用的性能。对于查询性能最常用的就是创建索引。经过测试,2000万条记录,每条记录200字节两列varchar类型的

SQL索引-初学心得和基本使用

北城余情 提交于 2019-11-29 13:57:27
对于一个MySQL的初学者来说,数据库的索引和优化可能并没有太大的感觉吧,因为我们并没有面对过大数据的搜索的工作,在小的数据中,由于咱电脑速度还是比较快的,所以也没什么感觉。我刚刚学数据库的时候,一直以为数据库是很智能的,我们加入、删除和查询的时候都是用很优的算法进行,但是今天我学习了数据库索引之后才发现,原来当我们对一个表如果不是用主键进行查询的时候,数据库是进行逐行比对的方式进行搜索,这应该是最慢最无语的方法了,所以我们需要创建合适的索引帮助我们实现数据库的查询。 首先,笔者也是个二逼孩子。。。开始学的时候,以为有了primary key我们就能很快的查询了,也觉得索引应该是基于primary key的。这种脑残的想法不会只有我一个人有吧,所以开头我们就先谈下索引和primary key的区别吧。 我们需要知道主键是索引,但索引不一定是主键。并且主键具有唯一性,而只有唯一性索引才具有唯一性,主键的值不能为空,不能重复,但是索引可以在我们程序中动态创建删除。在作用方面:索引只是加快查询和排序等操作的速度,但是primary key则是用于保证数据的完整性,同时也避免编写一些触发器。 好了,下面进入正题哈: 首先,我们需要知道索引是什么,索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针。就好比我们的数据是一本书,而索引是书的目录,在没有索引的情况下

最全面的 MySQL 索引详解

 ̄綄美尐妖づ 提交于 2019-11-29 13:57:17
什么是索引? 1、索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。对于索引,会保存在额外的文件中。 2、 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。 索引由数据库中一列或多列组合而成,其作用是提高对表中数据的查询速度 索引的优点是可以提高检索数据的速度 索引的缺点是创建和维护索引需要耗费时间 索引可以提高查询速度,会减慢写入速度 索引分类 1.普通索引 2.唯一索引 3.全文索引 4.单列索引 5.多列索引 6.空间索引 7.主键索引 8.组合索引 普通索引:仅加速查询 唯一索引:加速查询 + 列值唯一(可以有null) 主键索引:加速查询 + 列值唯一 + 表中只有一个(不可以有null) 组合索引:多列值组成一个索引, 专门用于组合搜索,其效率大于索引合并 全文索引:对文本的内容进行分词,进行搜索 索引合并,使用多个单列索引组合搜索 覆盖索引,select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖 如何创建索引?记住一个单词—explain 创建表的时候创建索引 CREATE TABLE tbl_name( 字段名称 字段类型 [完整性约束条件], ,,,, [UNIQUE|FULLTEXT

Mysql干货

白昼怎懂夜的黑 提交于 2019-11-29 12:23:46
索引相关 关于MySQL的索引,曾经进行过一次总结,文章链接在这里 Mysql索引原理及其优化. 1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据. B+树底层实现是多路平衡查找树 .对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据. 那么可以看出他们有以下的不同: hash索引进行等值查询更快(一般情况下),但是却 无法进行范围查询 . 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围. hash索引不支持使用索引进行排序 ,原理同上. hash索引不支持模糊查询 以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测

mysql语句

假装没事ソ 提交于 2019-11-29 11:44:25
更新表==================================================== ADD COLUMN 给表增加新列 例子:key_middle后增加新列 >ALTER TABLE mysql_testdb.tablename0 >ADD COLUMN new_key char(10) NOT NULL DEFAULT 0 AFTER key_middle; CHANGE COLUMN 修改表的名称或数据类型 例子:new_key重命名及重设类型 >ALTER TABLE mysql_testdb.tablename0 >CHANGE COLUMN new_key key2 char(1) NULL DEFAULT 2; ALTER COLUMN 删除或修改指定默认值 例子:key2修改默认值 >ALTER TABLE mysql_testdb.tablename0 >ALTER COLUMN key2 SET DEFAULT 3; MODIFY COLUMN 修改指定列数据类型 例子:key2修改类型 >ALTER TABLE mysql_testdb.tablename0 >MODIFY COLUMN key2 char(20) FIRST; DROP COLUMN 删除 例子:删除key2列 >ALTER TABLE mysql_testdb

一文带您了解 Elasticsearch 中,如何进行索引管理(图文教程)

戏子无情 提交于 2019-11-29 10:21:42
欢迎关注笔者的公众号: 小哈学Java , 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习、面试资源哟!! 个人网站: https://www.exception.site/essay/about-elasticsearch-index-manage 在 Elasticsearch 中,索引是一个非常重要的概念,它是具有相同结构的文档集合。类比关系型数据库,比如 Mysql, 你可以把它对标看成和 库 同级别的概念。 今天小哈将带着大家了解, 在 Elasticsearch 中,都是如何对索引进行操作的。 目录 一、创建索引 二、删除索引 三、获取索引信息 四、打开/关闭索引 一、创建索引 1.1 开始创建索引 您可以通过 Elasticsearch 的 RESTFul API 来创建索引: PUT http://127.0.0.1:9200/commodity 注意:默认情况下,创建的索引分片数量是 5 个,副本数量是 1 个。 您可以通过如下参数来指定分片数、副本数量: { "settings": { "number_of_shards": 3, "number_of_replicas": 2 } } 1.1.1 实战演示 通过 CURL 命令来上手操作一下,我们尝试创建一个 商品 索引, 看下效果: curl -X PUT "localhost

MySQL 索引知识整理(创建高性能的索引)

可紊 提交于 2019-11-29 08:28:59
前言: 索引优化应该是对查询性能优化的最有效的手段了。索引能够轻易将查询性能提高几个数量级。 // 固态硬盘驱动器有和机械硬盘启动器,有着完全不同的性能特性; 然而即使是固态硬盘,索引的原则依然成立, 只是那些需要尽量避免的糟糕索引对固态硬盘的影响没有机械硬盘那么糟糕。 现在很多公司都将数据库的优化工作都依托于 DBA 去完成,在我看来,这些都应该是程序员必备的技能, 有经验和没经验的程序员在数据库使用起来也有很大的差异,这些差异取决开发人员对索引内部的数据结构认识, 对所有负责的业务熟悉程度,从而才能建立卓越的索引,达到性能最大化。 一、索引基础 索引在数据库中的作用,粗暴的原理介绍不做解释,太基础。 在 MySQL 中,索引可以包含一个或者多个列的值。 如果索引包含多个列,那么列的顺序十分重要,因为 MySQL 只能高效地使用索引最前缀列。 创建一个包含两个列的索引,和创建两个只包含一个列的索引大有不同。 二、索引的类型 MySQL 中有两种索引类型:BTree 和 Hash; 不同的存储引擎的索引工作方式并不一样,也不是所有的存储引擎都支持所有类型的索引。 即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同。 MyISAM 使用前缀压缩技术使得索引更小,但 InnoDB 则按照原数据格式进行储存。 MyISAM 索引通过数据的物理位置引用被索引的行,而 InnoDB

[MySQL-笔记]创建高性能索引

匆匆过客 提交于 2019-11-29 08:28:46
  索引,MySQL中也叫“键”,是存储引擎中用于快速找到记录的一种数据结构,具体的工作方式就像书本中的索引一样,但是具体的实现方式会有差别。 一.索引分类 B-Tree索引:    优点: MyISAM中,索引根据数据的 物理位置 引用被索引的行,InnoDB中根据 主键 引用被索引的行。 B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,而是从索引的根节点开始进行搜索。 B-Tree对索引列是顺序组织存储的,所以很适合查找 范围 数据。 一般来说,B-Tree可以按照某种方式查找到值,那么也可以用这种方式排序    限制: 如果不是按照索引的最左列开始查到,则无法使用索引 不能跳过索引中的列 如果查询中有某个列的范围查询,则其右边所有的列都无法使用索引优化查找。 哈希索引:   哈希索引基于哈希表实现,只有精确匹配的索引所有列的查询才有效   优点: 非常快   限制: 哈希索引只包含哈希值和行指针,而不存储字段值,所以 不能使用索引中的值来避免读取行 。 哈希索引不是按照索引值顺序存储的,所以 不能用于排序 。 哈希索引不支持部分索引列匹配查找。 哈希索引只支持等值比较查询。 哈希冲突很多的话,一些索引维护操作的代价会很高。 二.索引的优点 最常见的是B-Tree索引,按照顺序存储数据,所以可以用来做ORDER BY和GROUP

MySQL 索引设计概要

大兔子大兔子 提交于 2019-11-29 08:27:42
在关系型数据库中设计索引其实并不是复杂的事情,很多开发者都觉得设计索引能够提升数据库的性能,相关的知识一定非常复杂。 然而这种想法是不正确的,索引其实并不是一个多么高深莫测的东西,只要我们掌握一定的方法,理解索引的实现就能在不需要 DBA 的情况下设计出高效的索引。 本文会介绍 数据库索引设计与优化 中设计索引的一些方法,让各位读者能够快速的在现有的工程中设计出合适的索引。 磁盘 IO 一个数据库必须保证其中存储的所有数据都是可以随时读写的,同时因为 MySQL 中所有的数据其实都是以文件的形式存储在磁盘上的,而从磁盘上随机访问对应的数据非常耗时,所以数据库程序和操作系统提供了缓冲池和内存以提高数据的访问速度。 除此之外,我们还需要知道数据库对数据的读取并不是以行为单位进行的,无论是读取一行还是多行,都会将该行或者多行所在的页全部加载进来,然后再读取对应的数据记录;也就是说,读取所耗费的时间与行数无关,只与页数有关。 在 MySQL 中,页的大小一般为 16KB,不过也可能是 8KB、32KB 或者其他值,这跟 MySQL 的存储引擎对数据的存储方式有很大的关系,文中不会展开介绍,不过索引或行记录是否在缓存池中极大的影响了访问索引或者数据的成本。 随机读取 数据库等待一个页从磁盘读取到缓存池的所需要的成本巨大的,无论我们是想要读取一个页面上的多条数据还是一条数据,都需要消耗约