索引的概述和性能分析

索引index,是一种有序的数据结构,可以高效的获取数据,在数据库中维护着满足查找特定算法的数据结构,就是索引

无索引的情况,查询数据时会全表扫描,效率极低

索引结构

(1)二叉树,查询性能还行,但当数据顺序插入时,就会形成链表,数据量大时,层级就深,查询效率慢

(2)红黑树,是普通二叉树优化,但本质仍是二叉树,不适合大数据情况

(3)BTree,即多路平衡查找树,该树一个节点下可以挂多个节点,以一个5阶的树,他的每个节点底下可以挂5个子节点,每个节点最多存储4个key,5个指针。节点中超过了4个key,就会向上分裂。

(4)B+Tree,以4阶的树为例,所有的元素都会出现在叶子节点,上面的节点不存放数据,且叶子节点形成了单项链表、

在mysql中的B+Tree中,对普通的树进行了优化,即叶子节点形成的不再是单向链表,而是双向链表

(5)Hash用一定的hash算法,算出对应的hash值,映射到对应的位置上,然后存储在hash表中

多个key计算的hash值有可能重复,可以通过链表来解决(类似HashMap)

Hash只能用于对等比较,不能范围查询,也不能排序,因为查询结果无序,但查询效率高,通常只需要查询一次,有时候遇到hash碰撞要多查询

索引的分类

(1)主键索引PRIMARY

(2)唯一索引UNIQUE

(3)常规索引

(4)全文索引FULLTEXT

innoDB中,索引按存储形式又分为聚集索引和二级索引

聚集索引就是叶子节点下挂的是这一行的行数据,而二级索引的叶子节点下挂的是表的主键,还要通过主键再次索引

如果表有主键,主键索引就是聚集索引

不存在主键,将使用第一个unique索引作为聚集索引

上述都不存在,则会自动生成一个rowid作为聚集索引

索引的语法

(1)查看对应表的索引 show index from 表名;

(2)创建索引 create [ PRIMARY/UNIQUE/FULLTEXT] index 索引名 on 表名;

索引名一般这样取:idx_

--------------------------

索引性能优化

性能的优化主要是优化查询语句,所以怎么才能知道什么表中的查询较多呢?

(1)根据show [session / global] status like 'Com__9_____';可以访问CRUD的访问频次

(2)查看慢查询日志

所有执行时间超过参数long_query_time的查询都会被记录在慢查询日志,默认下慢查询日志未开启

(3)profile

数据库支持profile的话可以使用,可以使用select @@have_profiling查看是否支持

profiling默认为关闭,需要set profiling = 1打开开关

show proflies能够帮我们查看sql优化中,时间都花在了哪里

(4)explain执行计划

前三种方法都只是在时间上判断sql语句性能,而explain或desc可以获取如何执行select的信息,包括在执行中表如何连接,和连接的顺序情况

explain执行计划中,各个字段的含义:

id:select查询的序列号,表示查询中执行select字句或是操作表的顺序,当id相同时,执行顺序从上到下,id不同,则id越大,越先执行。

select_type:表示select的类型,一般有primary(主查询,即外层查询),simple(不使用表连接或子查询),union(union中的第二个或之后的查询语句),subquery(子查询)

type:表示连接类型,性能由好到差的连接类型为:null(不使用任何表),system(访问了系统表),const(使用主键或唯一索引访问),eq_ref,ref(使用非唯一索引),range(范围查询),index,all,优化sql时尽量往前优化。

possible_keys:可能应用到这张表上的索引

keys:实际使用的索引,无则为null

key_len:索引使用的字节数,一般来说长度越短越好

rows:mysql认为必须要执行查询的行数,是一个估计值

filtered:返回结果的行数占需读取行数的百分比,越大越好

extra:额外展示的信息

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch是一个开源的分布式搜索和分析引擎,构建在Apache Lucene库之上。它提供了一个分布式存储、搜索和分析大规模数据的解决方案,具有高性能、可扩展性和强大的全文搜索功能。 作为一个实时的分布式搜索引擎,Elasticsearch能够快速地存储、检索和分析海量数据。它使用倒排索引(Inverted Index)的数据结构来实现高效的全文搜索,支持复杂的查询和聚合操作。 以下是一些关键特性和用途: 1. 分布式架构:Elasticsearch采用分布式架构,可以水平扩展,通过将数据分散存储在多个节点上来提高性能和容错性。 2. 实时搜索和分析:Elasticsearch能够在毫秒级别实现实时搜索和分析,使得用户能够快速获取到最新的数据和结果。 3. 多种查询支持:Elasticsearch支持全文搜索、精确匹配、模糊查询、范围查询、聚合查询等多种查询方式,可以满足各种复杂的搜索需求。 4. 多种数据类型支持:Elasticsearch支持处理不同类型的数据,包括文本、数值、地理位置、日期等。它能够自动识别字段类型,并提供相应的搜索和分析功能。 5. 分布式数据处理:Elasticsearch提供了丰富的分布式数据处理功能,包括索引、更新、删除、批量操作、数据复制和故障转移等。 6. 可扩展性和高可用性:Elasticsearch支持水平扩展,可以通过添加更多的节点来处理更大规模的数据。它还提供了数据备份和故障转移机制,以确保数据的高可用性和可靠性。 Elasticsearch广泛应用于各种场景,如日志分析、实时监控、电商搜索、推荐系统、企业搜索等。它的强大搜索和分析能力使得用户能够快速从海量数据中获取有价值的信息和洞察。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值