首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏兜兜毛毛

    MySQL 索引3

    3. 平衡二叉树(AVL Tree) 平衡二叉树的定义:左右子树深度差绝对值不能超过1。 什么意思呢?比如左子树的深度是2,右子树的深度只能是1或者3。 https://www.cs.usfca.edu/~galles/visualization/BTree.html 比如MaxDegree(路数)是3的时候,我们插入数据1、2、3,在插入3的时候,本来应该在第一个磁盘块 把中间的数据2提上去,把1和3变成2的子节点。 ? 从这个里面我们也能看到,在更新索引的时候会有大量的索引的结构的调整,所以解释了为什么我们不要在频繁更新的列上建索引,或者为什么不要更新主键。 在查找数据时一次页的查找代表一次IO,也就是说,一张2000万左右的表,查询数据最多需要访问3次磁盘。 所以在InnoDB中B+树深度一般为1-3层,它就能满足千万级的数据存储。 索引的创建 1、在用于where判断order排序和join的(on)字段上创建索引 2、索引的个数不要过多。——浪费空间,更新变慢。 3、区分度低的字段,例如性别,不要建索引

    56920发布于 2020-08-11
  • 来自专栏逸鹏说道

    维护索引3)——通过重建索引提高性能

    前言: 重建一个索引只是在内部删除并重建索引,使得碎片消失、统计信息更新、物理顺序重新排列组织。它会压缩数据页,按照填充因子填充适当的数据。如果有需要,也会添加新的数据页。 准备工作: 首先先要决定是否达到了重建索引的临界值。否则,重组索引会更好。当碎片超过30%,那么重建索引会比较好。 重建索引有两种方式,在重建之前应该考虑使用哪种会更好: 1、 脱机:脱机重建索引是默认选项。它会锁住整个表,知道重建结束,没有人可以访问这个表。如果表非常大,这将持续几个小时甚至更久。 注意:是否联机重建索引只有开发版和企业版可用。其他版本只有脱机重建。 因为重建大表索引会非常耗时,所以不要不耐烦并停止重建操作,这样会引起一些危险的后果,并可能使得数据库进入恢复模式。 重建索引需要有sysadmin、db_onwer或者db_ddladmin角色。

    1.2K40发布于 2018-04-11
  • 来自专栏小工匠聊架构

    MySQL-索引优化篇(3)_利用索引优化锁

    ---- 利用索引优化锁 为什么索引能优化锁 Innodb采用的行级锁,只有在修改行时才会对需要修改的行加锁。 但是这种情况只有在Innodb层过滤掉不需要的行是才有效。 所以利用索引可以过滤掉不需要的数据, 使用索引的话,仅需要锁定被索引检索出来的数据,而不是锁定全部数据,从而达到优化锁的目的。 索引可以减少锁定的行数 索引可以加快处理速度,同时也加快了锁的释放 ---- 演示 举个例子 (演示锁, 肯定需要两个会话了) 无索引的情况 (获取不同的数据 发生了阻塞) session 1 : mysql 1 row in set, 1 warning (0.00 sec) ERROR: No query specified mysql> mysql> begin ; # Step3 HUMPHREY | WILLIS | 2006-02-15 04:34:33 | +----------+------------+-----------+---------------------+ 3

    48630发布于 2021-08-17
  • 来自专栏GreatSQL出品技术文章

    3.联合索引、覆盖索引及最左匹配原则|MySQL索引学习

    索引被使用的前提下,tcol02的索引才会被使用。 `t3` ( `id` int(11) NOT NULL AUTO_INCREMENT, `tcol01` tinyint(4) DEFAULT NULL, `tcol02` smallint 情况3:下面的SQL用不到索引 [root@GreatSQL][test]>explain SELECT /* NO_CACHE */ * FROM t1 WHERE tcol02=167; +---- 那么就可以使用到覆盖索引的功能,查询数据无需回表,减少随机IO。 3.效率高。多列条件的查询下,索引列越多,通过索引筛选出的数据就越少。 3.尽量避免>、<、between、or、like首字母为%的范围查找,范围查询可能导致无法使用索引。 4.只筛选需要的数据字段,满足覆盖索引的要求,不要用 select * 筛选所有列数据。

    1.9K10编辑于 2022-04-18
  • 来自专栏源码之路

    「Mysql索引原理(十四)」索引案例3-优化排序

    对于那些选择性非常低的列,可以增加一些特殊的索引来做排序。 例如,可以创建(sex,rating)索引用于下面的查询: mysql> SELECT <cols> FROM profiles WHERE sex=‘M’ ORDER BY rating LIMIT 10; 这个査询同时使用了ORDER BY和LIMIT,如果没有索引的话会很慢。 即使有索引,如果用户界面上需要翻页,并且翻页翻到比较靠后时査询也可能非常慢。 优化这类索引的另一个比较好的策略是使用延迟关联,通过使用覆盖索引查询返回需要的主键,再根据这些主键关联原表获得需要的行。这可以减少 MySQL扫描那些需要丢弃的行数。

    76130发布于 2020-09-04
  • 来自专栏java学习java

    索引的数据结构(3

    3. 叶子节点包括 k-1 个关键字(叶子节点没有孩子),k 的取值范围为 [ceil(M/2), M]。 4. 上面那张图所表示的 B 树就是一棵 3 阶的 B 树。 我们可以看下磁盘块 2,里面的关键字为(8,12),它 有 3 个孩子 (3,5),(9,10) 和 (13,15),你能看到 (3,5) 小于 8,(9,10) 在 8 和 12 之间,而 (13,15 按照指针 P1 找到磁盘块 2,关键字为(8,12),因为 9 在 8 和 12 之间,所以我们得到指针 P2; 3. 3. 非叶子节点仅用于索引,不保存数据记录,跟记录有关的信息都放在叶子节点中。而 B 树中, 非 叶子节点既保存索引,也保存数据记录 。 4.

    51930编辑于 2022-11-15
  • 来自专栏vivo互联网技术

    【干货】Elasticsearch的索引性能优化(3

    创建索引的API允许实例化一个索引。Elasticsearch能够为多个索引,包括跨索引的操作提供支持。每个创建的索引都有与其关联的单独配置。 localhost:9200/my_index -d '{ "settings" : { "index" : { "number_of_shards" : 3, 索引别名API允许为一个索引起一个别名,并且所有的API会自动将别名转换为对应的索引。一个别名也可以同时映射到多个索引,当指定别名时,它会自动扩展到所有的对应的索引3 启用专门的数据节点 数据节点包含了建立索引的文档所在的分片。数据节点处理与数据相关的操作比如GRUD、搜索、聚合。这些操作属于I/O、内存和CPU密集型。 英文原文:https://qbox.io/blog/maximize-guide-elasticsearch-indexing-performance-part-3

    80920发布于 2019-04-19
  • 来自专栏vivo互联网技术

    【干货】Elasticsearch的索引性能优化(3

    创建索引的API允许实例化一个索引。Elasticsearch能够为多个索引,包括跨索引的操作提供支持。每个创建的索引都有与其关联的单独配置。 localhost:9200/my_index -d '{ "settings" : { "index" : { "number_of_shards" : 3, 索引别名API允许为一个索引起一个别名,并且所有的API会自动将别名转换为对应的索引。一个别名也可以同时映射到多个索引,当指定别名时,它会自动扩展到所有的对应的索引3 启用专门的数据节点 数据节点包含了建立索引的文档所在的分片。数据节点处理与数据相关的操作比如GRUD、搜索、聚合。这些操作属于I/O、内存和CPU密集型。 英文原文:https://qbox.io/blog/maximize-guide-elasticsearch-indexing-performance-part-3 ---- 本文章未经授权,禁止转载,

    1.3K30发布于 2019-03-19
  • 来自专栏学习有记

    聚集索引:SQL Server 进阶 Level 3

    108 733 3 356.90 43668 109 763 3 Scan count 1, logical reads 3. Scan count 1, logical reads 3. 表3:检索单个产品的所有行 前两个查询大大受益于聚簇索引的存在; 第三个是大致相等的。 有时聚集索引是有害的吗? 答案是肯定的,主要与插入,更新和删除行有关。 在我们的四级中,我们将重点从逻辑转向物理,介绍页面和范围,并检查索引的物理结构。 可下载的代码 Clustered.SQL 资源: Level3_Clustered.sql ----

    1.4K30发布于 2018-07-19
  • 来自专栏MySQL进阶

    MySQL的3索引合并优化⭐️or到底能不能用索引?

    MySQL导致索引失效的八股文中有这样一条:使用or会导致索引失效那么是不是所有场景都会失效呢? 比如有两个集合分别是(1,2,3)、(2,3,4),那么交集就是它们都存在的值(2,3)举例这样一条SQL:select * from seat where seat_code = 'caicaiseat ' and student_id = 1当不使用索引合并优化时,优化器可能选择seat_code索引或者student_id索引当使用seat_code索引时,先在索引中找到满足seat_code = ,因此大部分使用交集索引合并的场景是等值比较=开启交集索引合并,查看执行计划type类型为索引合并,使用到这两个索引,附加信息显示用到交集索引合并,并且还用上覆盖索引不需要回表由于seat座位表只存在主键 比如有两个集合分别是(1,2,3)、(2,3,4),那么并集就是它们都存在值的总和(1,2,3,4)举例这样一条SQLselect * from seat where seat_code = 'caicaiseat

    1.1K22编辑于 2024-06-18
  • 来自专栏机器学习之禅

    3 | PyTorch张量操作:基本操作、索引、命名

    2.从列表到张量 搞过Python的应该都知道列表这个东西,也可以认为是数组,比如像下面这样定义一个列表 a = [1.0, 2.0, 3.0] a[0] #按位置索引访问列表元素 这时候就返回其中的值 尝试几个简单的操作 a[1] ### 按位置索引访问元素 out: tensor(1.) float(a[1]) #强行转为浮点数 out: 1.0 #可以看到这个时候输出的就不带tensor限定了 a 使用shape方法查看张量的形状,这里返回的size表示这是一个三行二列的张量(数组) points.shape out:torch.size([3,2]) tips:当我们用索引访问张量中的元素,或者张量中的张量时 4.范围索引 这个跟Python list的操作是一样的 points = torch.tensor([[4.0, 1.0], [5.0, 3.0], [2.0, 1.0]]) points outs: outs: (torch.Size([2, 3, 5, 5]), torch.Size([2, 3, 5, 5]), torch.Size([3, 1, 1])) 爱因斯坦求和约定(einsum)提供了一套既简洁又优雅的规则

    1.1K10编辑于 2022-07-11
  • 来自专栏迁移内容

    高性能MySQL(3)——创建高性能索引

    哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。 1.3、全文索引 全文索引是一种特殊类型的索引,它查找的是文本中的关键词,而不是直接比较索引中 的值。 前缀索引能大大节约索引空间,从而提高索引效率,但这样也会降低索引的选择性(索引选择性——不重复的索引值和数据表记录总数的比值); 索引前缀长度的选择——计算法。 例如:LELECT COUNT(DISTINCT city)/COUNT() AS sel1, COUNT(DISTINCT LEFT(city, 3))/COUNT() AS sel2, …; 如果前缀的选择性接近 3.3、多列索引 为多列创建合适的索引 多列索引。 例如:key(col1, col2, col3); MySQL5.0之后的版本引入了“索引合并”的策略,一定程度上可以使用表上的多个单列索引来定位表中的行; 索引合并策略有时候是一种优化后的结果,但实际上更说明表上的索引建得很糟糕

    1.6K20编辑于 2022-12-01
  • 来自专栏方丈的寺院

    存储优化(3)-mongo大表加索引

    摘要 在存储优化(2)-排序引起的慢查询优化中我们提到过排序对查询选择索引的影响。但是的解决办法就是增加一个索引。在线上给mongo的大表增加一个索引要慎重。 在增加索引的过程中也遇到了一些问题,这边进行相关的记录与分析。 问题描述 表结构 _id,biz_Id,version,name 索引 1. ":-1},"limit":1}} 增加一个索引 bizId,_id 增加索引过程 对于大表(该表记录数5亿),建立索引过程涉及到锁表,大量的读写操作、数据同步,肯定会影响线上的操作。 完美,走到了新的索引。 总结 最后解决是通过强制索引来避免索引误判,当然也可以将排序改成 sort({bizId:-1,_id:-1}) 这样也不会误判 总结一下: 大表加索引,需要确保不会block表的其他操作,尽量选择空闲时候

    3.1K10发布于 2020-04-01
  • 来自专栏侯哥的Python分享

    Mysql高级3-索引的结构和分类

    说明3:特殊二叉树红黑树当做索引是,大数据量情况下,层级比较深,检索速度慢   2.4 B树实现索引的弊端     以一个最大度数(max-degree)为5(5阶)的b树为例(每个节点最多储存4个key 相对于hash索引,B+树支持范围匹配及排序操作   三、索引分类   3.1 主键索引     针对于表中主键创建的索引,默认自动创建,只能有一个, 关键字:primary   3.2 唯一索引      ,主键索引就是聚集索引 如果不存在主键,将使用第一个唯一(unique)索引作为聚集索引 如果表没有主键,也没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引   3.6 二级索引     在InnoDB中,根据索引的储存形式划分的,将数据与索引分开储存,索引结构的叶子节点关联的是对应的主键,可以存在多个      说明:聚集索引下面存放的是整行的数据,二级索引下面存放的对应的主键 ,要不然聚集索引下存放了整行数据,二级索引下也放整行数据,就会很冗余   3.7 回表查询     说明1:首先根据name字段走二级索引     说明2:找到Arm对应的id=10     说明3

    44331编辑于 2023-07-31
  • 来自专栏嵌入式、安防、流媒体、AI分析

    m3u8索引文件介绍

    写在前面:m3u8文件使用UTF-8字符编码 m3u8索引文件介绍 EXTM3U: 这个是M3U8文件必须包含的标签,必须放在第一行 EXT-X-VERSION:M3U8文件的版本,常见的是3(目前最高版本应该是 EXT-X-MEDIA-SEQUENCE: 第一个TS分片的序列号 EXT-X-TARGETDURATION: 每个分片TS的最大的时长 EXT-X-ALLOW-CACHE: 是否允许cache EXT-X-ENDLIST: m3u8 文件结束符,表明M3U8文件不会再产生更多的切片 EXTINF extra info:分片TS的信息,如时长,带宽等 示例 test.m3u8文件 #EXTM3U #EXT-X-VERSION:3 #EXT-X-ALLOW-CACHE

    2.6K30编辑于 2023-01-04
  • 来自专栏一个会写诗的程序员的博客

    mysql 查看索引、添加索引、删除索引命令添加索引删除索引

    · Non_unique 如果索引不能包括重复词,则为0。如果可以,则为1。 · Key_name 索引的名称。 · Seq_in_index 索引中的列序列号,从1开始。 · Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。 · Cardinality 索引中唯一值的数目的估计值。 基数越大,当进行联合时,MySQL使用该索引的机 会就越大。 · Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。 · Index_type 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。 · Comment 添加索引 ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName) 删除索引 mysql> alter

    4.6K10发布于 2018-08-17
  • 来自专栏全栈程序员必看

    索引(index)_普通索引、唯一索引和复合索引.索引查询

    这是因为:创建主键的时候自动给主键添加了索引,且该索引为唯一性索引。 即主键一定是唯一性索引。 但是一张表中可以有多个唯一性索引,所以唯一性索引不一定是主键。 ************************ 在这里不得不讲一下普通索引和唯一性索引的区别: 1、普通索引 普通索引的唯一任务是加快对数据的访问速度。 只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。 2、唯一索引   普通索引允许被索引的数据列包含重复的值。 当建立复合索引index(column1,column2,column3),这就相当于建立了以下三个索引: index(column1), index(column1,column2) index(column1 ,column2,column3) // 跟三个字段的顺序没有关系 比如:index(column3,column1,column2),它们是一样的效果 上面是创建索引,下面的语句提供查询索引

    1.6K40编辑于 2022-07-22
  • 来自专栏ElasticSearch搜索引擎详解

    ElasticSearch详解——3.ES索引的创建过程详解

    本文是《ElasticSearch搜索引擎详解》系列文章的第三篇:ElasticSearch详解——3.ES索引的创建过程详解。 所以,6.x版本的索引结构如下: 7.x版本的索引结构如下: 索引一个文档 即通过一个文档,来创建索引。 CREATE(1), /** Updates a document */ UPDATE(2), /** Deletes a document */ DELETE(3) ; ... } 参数检查,查看是否有关键字,并获取相关关键字的值 0 = "parent" 1 = "pretty" 2 = "version\_type" 3 = "format" 4 = 再次遍历所有的request,获取获取每个request应该发送到的shardId,获取的过程是这样的:如果上一步获取到了routing则取routing,否则取文档ID,取其hash值(哈希算法 Murmur3Hash

    1.2K20编辑于 2024-12-26
  • 来自专栏后端从入门到精通

    B+树(3)聚簇索引,二级索引 --mysql从入门到精通(十五)

    上篇文章说了b+树索引的方案,因为用之前二分法查找,前提条件是索引必须是挨着的,而受到用户记录数的启发,建立了和用户记录真实数据页一样的目录记录页(索引),并且最高三层,最高层是根节点,最底层是叶子节点 3)目录记录页也是通过主键值连接成双向链表。 B+树的叶子节点存储的是完整的用户记录信息,包括隐藏页。 当满足这两个特点时,这就叫做聚簇索引,所有完整记录都记录在叶子节点。 在innoDB中,聚簇索引就是数据的存储方式(所有记录都在叶子节点中),也就是索引即是数据,数据即是索引。 二级索引(secondary index) 上面的聚簇索引只有在查询主键的时候,才有效果,所以聚簇索引又叫主键索引3)目录记录页也是通过c2列连接成双向链表。 二级索引的B+树的叶子节点不是用户存储数据,只存储c2列+他的主键。 二级索引的目录页不再是主键+页号,而是c2列+页号。

    53940编辑于 2022-07-26
  • 来自专栏desperate633

    深入理解四种数据库索引类型(- 唯一索引非唯一索引 - 主键索引(主索引) - 聚集索引非聚集索引 - 组合索引)唯一索引非唯一索引主键索引(主索引)聚集索引非聚集索引5.组合索引(联合索引

    非唯一索引 2.非唯一索引是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中可以重复,不要求唯一。 主键索引(主索引3.主键索引(主索引)是唯一索引的特定类型。 创建索引 create index idx1 on table1(col1,col2,col3) 查询 select * from table1 where col1= A and col2= B and col3 = C 组合索引查询的各种场景 组合索引 Index (A, B, C) 下面条件可以用上该组合索引查询:  A>5  A=5 AND B>6  A=5 AND B=6 AND C=7  A=5 AND B=6 AND C IN (2, 3) 下面条件将不能用上组合索引查询:  B>5 ——查询条件不包含组合索引首列字段  B=6 AND C=7 ——理由同上 下面条件将能用上部分组合索引查询 ——当范围查询使用第一列, 查询条件仅仅能使 用第一列  A=5 AND B>6 AND C=2 ——范围查询使用第二列, 查询条件仅仅能使用 前二列  A=5 AND B IN (2, 3)

    14.2K20发布于 2018-08-22
领券