首页 > 其他分享 >索引整理

索引整理

时间:2024-12-23 17:31:17浏览次数:4  
标签:index name 查询 索引 sql 整理 select

// 索引是高效获取数据的数据结构
// 索引结构主要有B+TREE与HASH
// 索引分类:主键索引,唯一索引,常规索引,全文索引
// 根据索引结构分类分为:聚集索引,二级索引

// 索引基础操作
// 创建索引
// 一个索引关联单个字段成为单列索引,关联多个字段则成为联合索引或者是组合索引
// create [unique | fulltext] index index_name on table_name(udex_col_name,....);

// 查看索引
// show index from table_name;

// 删除索引
// drop index index_name on table_name;

// ---------------------------------------------------------------------------------------------
// sql性能分析

// 第一种方法
// 查看数据库的insert,update,delete,select访问频次
// Com后面有七个下划线
// show global status like 'Com_______';

// 第二种方法
// 慢查询日志
// 通过慢查询日志定为查询较慢的sql语句,进行定点优化
// 所有执行时间超过指参数比如默认为10秒的所有sql语句的日志,针对于单个sql语句操作时间
// 慢查询默认关闭需要在(/etc/my.cnf)中配置
// #开启慢查询
// slow_query_log = 1
// #设置慢查询日志实践为2秒,sql语句执行时间超过2秒,则为慢查询
// long_query_time = 2

// 第三种方法
// profile详情
// show profile可以展示时间都耗费到了哪里
// 通过以下操作可以查看当前mysql是否支持profile操作:
// select @@have_profiling;
// 我们可以通过set语句在session/global级别开启profiling
// set profiling = 1;

// 查看每一条sql的耗时基本情况
// show profiles;

// 查看指定query_id的sql语句各个阶段的好事情况
// show profile for query query_id;
show profile for query 16;

// 查看指定query_id的sql语句cpu的基本使用情况
// show profile cpu for query query_id;

// 第四种方法
// explain执行计划
// 获取执行select语句的信息,包括在select语句执行过程中如何连接和连接的顺序
// explain + 完整select语句;

// exlanin字段分析
// type表示连接类型,由好到差分别为
// NULL表示没有经过表查,例如直接select 1+1;
// system一般只有访问系统表时才会有这个速度
// const表示直接访问主键的速度
// eq_ref表示访问唯一索引扫描的速度
// ref表示通过非唯一索引访问的速度
// range通常出现在 in(), between ,> ,<, >= 等操作中。使用一个索引来检索给定范围的行
// index指的是遍历索引
// all表示全表扫描
// NULL, system, const, eq_ref, ref, range, index, all;

// --------------------------------------------------------------------------------------------------
// 索引使用注意事项
// 最左前缀法则
// 如果索引了多列,如果跳过某一列,后面的字段索引失效
// 只要索引存在就行,跟放的前后位置无关
// 使用>或者<,后面的索引将会失效,而>=与<=不受该限制
// 不要在索引列上进行运算,否则索引失效
// 字符串类型不加''直接进行查询,可以查到对应结果,但是索引会失效
// 模糊匹配中,如果字段前面使用模糊匹配,索引会失效,字段后面使用则不会失效,如'软件%'与'%工程'
// 用or分开的条件,只有当or前与or后的条件都有索引时,涉及到的索引才会生效
// mysql会自动评估使用索引与使用全表扫描的查询速度,会选择速度更快的那种

// sql提示
// 当一个字段有多个索引可以使用时,可以选择不用或者用某个索引
// use指的是给mysql建议用某个索引,ignore指的是忽略某个索引,force指的是强制mysql使用某个索引
// select * from table_name use index(index_name) where 条件列表;
// select * from table_name ignore index(index_name) where 条件列表;
// select * from table_name force index(index_name) where 条件列表;

// 当查询到没有索引的字段时,就会出现回表查询,因为辅助索引的节点中没有相应的字段,所以需要根据查找到的id回到聚集索引再次查找,所以回表查询的时间更加长
// 所以在sql查询中尽量避免使用select * ,除非创建了一个包含表中所有字段的聚集索引
// using index condition 表示该查找使用了回表查询
// using where;using index 表示使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据

// 前缀索引
// 当所需要查询的字段中有非常长的字符串时,这样会让索引空间占用很大,并且影响查询效率
// 因此,我们建立索引时可以只提取部分前缀字符串建立索引
// 其中n表示提取字符串的前n个字符建立索引
// create index index_name on table_name(column(n));

// 在业务场景中,如果存在多个查询条件,考虑针对于查询字段建立联合索引
// 尽量选择区分度高的建立索引,尽量建立唯一索引
// 要控制索引的数量,索引不是多多益善
// 如果索引列不能包含NULL值,在创建表时使用NOT NULL进行约束

标签:index,name,查询,索引,sql,整理,select
From: https://www.cnblogs.com/caigouyizhi/p/18624590

相关文章

  • 死锁分析-(using intersect多个索引引发死锁)
    MySQL:8.0.32线上有一个SQL偶然报出死锁信息,是一类根据唯一ID和status进行更新的SQL。age是唯一字段,理论上来说根据唯一字段更新不应该出现死锁,但在update执行计划中发现,并不止使用了age索引,还使用了status索引。【Usingintersect(uni_age,idx_name);Usingwhere;Usingtemp......
  • 宏观数据整理
    importakshareasakimportpandasaspd#将各个数据集放入列表中,方便循环处理data_frames=[ak.macro_usa_core_cpi_monthly(),ak.macro_usa_core_pce_price(),ak.macro_usa_gdp_monthly(),ak.macro_usa_non_farm(),ak.macro_usa_unemployment_......
  • 关于 K8s 的一些基础概念整理-补充【k8s系列之五】
    〇、前言本文继续整理下K8s的一些基础概念,作为前一篇概念汇总的补充。前一篇博文链接:https://www.cnblogs.com/hnzhengfy/p/k8s_concept.html。一、详情1.1LabelLabel在k8s中是一个非常核心的概念,我们可以将Label指定到对应的资源对象中,例如Node、Pod、ReplicaSet......
  • 网站结构优化:提升用户体验与搜索引擎排名的关键策略
    在当今数字化时代,网站不仅是企业展示形象和服务的重要窗口,更是与用户进行互动和交易的核心平台。一个结构清晰、易于导航的网站不仅能够提升用户体验,还能显著提高搜索引擎的排名,从而吸引更多的流量和潜在客户。本文将深入探讨网站结构优化的重要性、基本原则以及具体策略,旨在......
  • 问答网站地图优化:提升用户体验与搜索引擎效率的艺术
    在当今信息爆炸的时代,问答网站作为用户获取知识和解答疑问的重要平台,其内容的组织与呈现方式对于提升用户体验和搜索引擎效率至关重要。网站地图作为网站的导航蓝图,不仅帮助用户快速定位所需信息,还是搜索引擎理解和索引网站内容的关键工具。本文将深入探讨问答网站地图的优化......
  • LeetCode《图解算法数据结构》链表:图书整理 I
    题目书店店员有一张链表形式的书单,每个节点代表一本书,节点中的值表示书的编号。为更方便整理书架,店员需要将书单倒过来排列,就可以从最后一本书开始整理,逐一将书放回到书架上。请倒序返回这个书单链表。输入head=[3,6,4,1]输出[1,4,6,3]解法1:递归classSolution{public......
  • C 数组:索引魔杖点化的数据星图阵列
    一、数组1.数组的概念数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:数组中存放的是1个或者多个数据,但是数组元素个数不能为0。数组中存放的多个数据,类型是相同的。2.数组的分类数组主要分为一维数组和多维数组,其中多维数组里二维数组较为常见......
  • 如何高效调整网站新闻发布时间以提升搜索引擎排名
    在网站运营过程中,新闻时间的准确性和及时性对于用户体验和搜索引擎优化(SEO)都至关重要。正确地修改新闻时间不仅可以确保信息的时效性,还能帮助网站在搜索引擎中获得更好的排名。以下是修改网站新闻时间的具体步骤和注意事项:确定需求与目标在修改新闻时间之前,首先明确修改的目......
  • 阿里P7架构师,耗时十年整理的Java面试飞升笔记,差距不是一点点
    这个问题就不用假如了,我本身从事Java开发已经十年了,去年因为疫情原因导致公司需要断臂求生,熟悉的那些小伙伴们相继离开,心中五味杂陈,思前想后决定离开这个呆了五年的地方。在猎头的引荐下,最终选择了阿里;说是P7的职位,还是需要从小项目开始做起,这一年的时间我都是在忙着组建团队......
  • MySQL 数据库优化:分区、分表与索引创建
    MySQL数据库优化:分区、分表与索引创建目录概述MySQL分区(Partitioning)2.1什么是分区?2.2使用场景2.3分区类型2.4分区维护2.5示例:创建分区表MySQL分表(Sharding)3.1什么是分表?3.2使用场景3.3分片键选择3.4示例:手动分表3.5分表的挑战MySQL索引创建4.1什么是......