索引

我的MYSQL学习心得(九)

血红的双手。 提交于 2020-02-04 03:12:37
原文: 我的MYSQL学习心得(九) 我的MYSQL学习心得(九) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 我的MYSQL学习心得(八) 这一篇《我的MYSQL学习心得(九)》将会讲解MYSQL的索引 索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型。 根据存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。 大多数存储引擎有更高的限制。MYSQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关; MYISAM和InnoDB存储引擎只支持BTREE索引;MEMORY和HEAP存储引擎可以支持HASH和BTREE索引 索引的优点: 1、通过创建唯一索引,保证数据库表每行数据的唯一性 2、大大加快数据查询速度 3、在使用分组和排序进行数据查询时,可以显著减少查询中分组和排序的时间 索引的缺点: 1、维护索引需要耗费数据库资源 2、索引需要占用磁盘空间,索引文件可能比数据文件更快达到最大文件尺寸 3、当对表的数据进行增删改的时候,因为要维护索引,速度会受到影响 索引的分类 1

mysql索引

大憨熊 提交于 2020-02-03 18:10:45
索引类型分为 主键索引 它是一种特殊的唯一索引,不允许有空值 一般时在建表的时候同时创建主键索引 唯一索引 索引列的值必须唯一,但允许有空值 普通索引 最基本的索引,它没有任何限制 全文索引 fulltext是一种只适用于MyISAM表的一个索引类型 被索引列的数据只能是以下三种的组合char、varchar、text MySQL是通过match()和against()两个函数来实现他的全文索引查询的功能 组合索引 也叫多列索引,就是在多列上同时创建索引,使得多列的组合值唯一,创建组合索引的好处是比分别创建多个单列索引的查询速度要快很多 组合索引创建遵循“最左前缀”规则 如三列:id,name,age创建组合索引,则相遇于分别创建了id、name、age;id、name;id这三个索引 —————————————————————————————————————————— 索引创建规范 索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间 在插入与更新数据时,要重写索引文件 单张表中索引数量不超过5个 单个索引中的字段数不超过5个 不使用更新频繁的列作为主键 合理创建组合索引 不在低基数列上建立索引,例如‘性别’ 不在索引列进行数学运算和函数运算,会使索引失效 不使用%前导的查询,如like “%xxx” 无法使用索引 不使用反向查询,如not in /

mysql索引的简介

*爱你&永不变心* 提交于 2020-02-03 09:21:08
1.索引是什么? 官方定义:索引是帮助MySQL高效获取数据的数据结构,所以索引的本质是数据结构。 当然还有一个更为简单的理解是:数据本身之外,数据库还维护这一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法, 而这个数据结构就是索引。 存储位置:因为索引本身也很好,因此不可能全部都放在内存中,往往都是以索引文件的方式存储在 磁盘 上。 默认索引采用的算法: 一般采用BTREE 。 2.索引的优势 1)类似图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本。 2)通过索引列对数据进行排序,降低数据排序成本,降低了CPU的消耗。 3.索引的劣势 1)实际上索引也是一张表,该表的主要内容就是保存索引的字段,并且指向具体表的记录,因此索引会占据空间。 2)虽然索引可以提高查询速度,同时却会降低更新表的速度,如果对表进行insert、delete和update时,因为在这过程中,MySQL不仅要保存数据到具体表,也要保存索引文件。 3)索引只是提高sql效率的一个因素,如何建立索引需要花费大量是时间建立适合的索引。 4.索引的分类 1)单值索引:即一个索引只包含单个列,一个表可以有多个单列索引。 2)唯一索引:索引列的值必须唯一,但允许有空值。 3)复合索引:一个索引包含多个数据表字段。(在高并发条件下,倾向建立复合索引

修正sqlserver索引错误

点点圈 提交于 2020-02-03 06:07:10
DBCC UPDATEUSAGE(ufdata_808_2002); 运行位置:查询分析器 主要用途: 意外关机或者日志被删除后,表发生紊乱,表保留空间过多,可使用本方法。使用后再进行数据库收缩,可缩小10%空间,并提高速度。基本每个数据库都有错误。 我单位用友数据库就是出现骉紊乱的情况,使用本命令就可以解决问题。 欢迎对用友8U和T6有疑问的朋友给我私信,或者QQ联系本人 来源: CSDN 作者: rslwf 链接: https://blog.csdn.net/rslwf/article/details/104141381

pandas自学笔记01

不问归期 提交于 2020-02-03 05:36:38
@pandas pandas自学笔记01 一、基本介绍 1.安装pandas 2.numpy与pandas 3.基本操作 (1) 导入模块 (2) 创建pandas的序列pd.Series (3) DataFrame创建 (4) 判断数据类型 (5) 取值 (6) 描述DataFrame—df.describe() (7) 取转置 (8) 排序 二、选择数据 1.创建一个DataFrame 2.按列名选择数据 3.按行名选择数据 4.根据标签label:.loc选择数据 5.根据位置position:.iloc选择数据 6.根据标签和位置选择数据.ix 7.bool类型选择数据 一、基本介绍 1.安装pandas pip install pandas 2.numpy与pandas numpy 序列化的矩阵或者序列 列表(得到矩阵的行列信息) pandas 字典型的numpy 字典(因为可以给不同的行和列命名) 3.基本操作 (1) 导入模块 一般情况下numpy与pandas 都是搭配使用的 import pandas as pd import numpy as np (2) 创建pandas的序列pd.Series 创建一组带行索引的数据 pd . Series ( [ 1 , 3 , 5 , np . nan , 6 , 2 ] ) #np.nan 表示空值 结果: (3)

为什么InnoDB表必须有主键,并且推荐使用整型的自增主键?

爷,独闯天下 提交于 2020-02-03 01:31:23
innoDB索引文件和数据文件是在一起的 frm:表结构;ibd:索引文件和数据文件 问:为什么InnoDB表必须有主键。并且推荐使用整型的自增主键: 1、如果设置了主键,那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增)。 2、如果表使用自增主键 那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,主键的顺序按照数据记录的插入顺序排列,自动有序。当一页写满,就会自动开辟一个新的页 3、如果使用非自增主键(如果身份证号或学号等) 由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。 问:为什么非主键索引结构叶子结点存储的是主键值: 减少了出现行移动或者数据页分裂时二级索引的维护工作(当数据需要更新的时候,二级索引不需要修改,只需要修改聚簇索引

正则表达式matcher.group()用法

こ雲淡風輕ζ 提交于 2020-02-03 01:18:57
String str = "Hello,World! in Java." ; Pattern pattern = Pattern . compile ( "W(or)(ld!)" ) ; Matcher matcher = pattern . matcher ( str ) ; while ( matcher . find ( ) ) { System . out . println ( "Group 0:" + matcher . group ( 0 ) ) ; //得到第0组——整个匹配 System . out . println ( "Group 1:" + matcher . group ( 1 ) ) ; //得到第一组匹配——与(or)匹配的 System . out . println ( "Group 2:" + matcher . group ( 2 ) ) ; //得到第二组匹配——与(ld!)匹配的,组也就是子表达式 System . out . println ( "Start 0:" + matcher . start ( 0 ) + " End 0:" + matcher . end ( 0 ) ) ; //总匹配的索引 System . out . println ( "Start 1:" + matcher . start ( 1 ) + "

elasticsearch之mappings

感情迁移 提交于 2020-02-02 19:28:00
前言 mappings 就相当于 关系型数据库中的 表结构 例: GET t1 { "t1" : { "aliases" : { }, # 该索引是否有别名 "mappings" : { #mappings 信息 "doc" : { #索引类型 doc "properties" : { #字段详细映射关系 在 properties中 "name" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } } } } }, "settings" : { #关于索引 t1 的settings 设置 "index" : { "creation_date" : "1553334893136", #索引创建时间 "number_of_shards" : "5", #主分片 "number_of_replicas" : "1", #副分片 "uuid" : "lHfujZBbRA2K7QDdsX4_wA", "version" : { "created" : "6050499" }, "provided_name" : "t1" } } } } 映射是什么? ES 中的 映射 用来 定义一个文档及其包含的字段如何存储 和索引的过程。 例如,我们可以使用映射来定义:

mysql索引介绍

此生再无相见时 提交于 2020-02-02 17:30:20
1、索引是什么   索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。   可以理解为“排好序的快速查找数据结构”   在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,   这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 2、优势   类似大学图书馆建书目索引,提高数据检索效率,降低数据库的IO成本。   通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消耗。 3、劣势   实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占空间的。   虽然索引大大提高了查询速度,同时确会降低更新表的速度,如对表进行INSERT、UPDATE、DELETE。   因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段。   都会调整因为更新所带来的键值变化后的索引信息。 4、索引的分类    注意:索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引             MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换             MEMORY/HEAP存储引擎:支持HASH和BTREE索引        1、索引我们分为四类来讲