mysql 索引详解

MySQL中索引详解 除聚簇索引之外的所有索引都称为辅助索引。在中InnoDB,辅助索引中的叶子节点存储的数据是该行的主键值都。在检索时,InnoDB使用此主键值在聚簇索引中搜索行记录。这里以user_innodb为例,user_innodb的id列为主键,age列为普通索引。 阅读详情

本博客主要内容有:BTree与B+Tree 对比,mysql聚簇索引与非聚簇索引 ,索引的离散性,联合索引,常用 Mysql 语句案例,mysql 存储过程案例

B-TREE

在这里插入图片描述
一个B-tree 是一棵多路绝对平衡查找树。所谓绝对平衡是指所有叶子节点都在同一层级。一颗B-TREE,相对于AVL树而言,减少了树高,减少了 IO次数。但是在mysql 中使用的是优化过的BTree,即B+TREE。

B+TREE

在这里插入图片描述
1.在B+tree 中,每个索引节点只存储关键字和指向子节点的索引,并没有存储数据。而B-tree,每个索引节点存储关键字,数据和指向子节点的索引。B+Tree 相比B-Tree而言,B+Tree中每个节点的关键字和子节点引用的比值为1:1,而B-Tree是2:3,B+TREE 每个节点可以存储更多的关键字
2.对于B+Tree 而言,只在叶子节点中存储所有记录,想要查找一个记录,必须要进行三次IO操作,而B-Tree的IO操作可能是一次,二次,三次。相对于B-Tree而言,B+Tree 更加稳定,方便后续调优
3.B+Tree中,叶子节点天然有序,当进行基于索引的排序会更加方便和基于索引的扫表能力会更强

mysql 索引

两种索引: InnoDB (聚簇索引)和MyISAM(非聚簇索引)
InnoDB 聚簇索引:与数据存放的位置一致,一张表只能存在一个聚簇索引。InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
一般来说不建议使用隐含字段作为主键.,当我们自定义主键时,字段长度只有4个字节,隐含主键不仅占据更多空间,而且会使行锁升级为表锁,降低 了并发性。
Innodb 创建的索引会生成两个文件,一个是以.frm结尾的表结构文件,另一个是.ibd结尾的索引树
主键索引:

在这里插入图片描述
** 辅助索引(二级索引,非聚簇索引):**
在这里插入图片描述
辅助索引(Secondary Index, 也就是非主键索引):
在叶子节点中会存储辅助索引列值+主键,并指向对应的行。
好处:1.innodb在移动行时无须更新行指针。
缺点:使用主键值会让辅助索引占据更多的空间。
所以,如果主键定义的比较大,其他索引也将很大。如果想在表上定义 、很多索引,则争取尽量把主键定义得小一些。同时InnoDB 不会压缩索引。
因此,在使用Innodb引擎时如果索引和sql编写不当往往会触发回表操作。
MyISAM:
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。
在这里插入图片描述

辅助索引
在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。创建MyIsam索引会生成三个数据文件,.frm的表结构文件,.myi的索引树文件,.myd中存储的实际数据
在这里插入图片描述

索引的离散性

无论是创建Innodb索引还是MyIsam索引,都会要求索引列的离散性要尽可能的好。其中离散性比值=count(distinct(col)):count(col)
如果离散性比值大于1:10,说明这个索引的离散性不错。
为什么要求索引的离散性尽可能的好呢?
因为索引离散性的好坏会影响优化器是否走索引。如果离散性太差,优化器会认为走索引的效果和全表扫描差不多,那么就不会走索引而去进行全表扫描了。

这边来记录一个问题,面试的时候也常考。
为啥Innodb的主键要设置为自增主键?

1.不设置主键采用默认主键时占据更多内存,降低并发度
2.在Innodb的叶子结点中是有序的,如果不采用自增主键的时候,会导致页的分离与合并,产生IO,降低性能。(页是Innodb的磁盘存储单位)这条是主要原因
3.离散性

讲解的很不错的博客:
mysql 聚簇索引原理
innodb 与MyISAM索引实现原理
回看:https://www.cnblogs.com/shijingxiang/articles/4743324.html

联合索引

联合索引:用多个列共同创建索引
联合索引与单列索引相比较,相当于把多棵单列索引数变成一棵,节省空间和提升效率。
在联合索引中,假设对(a,b,c)三列建立联合索引,利用索引查找时会先比较a,如果a相等然后再去比较b。
所以在联合索引中会有最左匹配原则。即如果where条件中没有a列,只有b,c两列的判断条件,那么联合索引会失效。
除此之外,在联合索引中如果出现了范围查询,那么后续索引也会失效。
但是在单列索引中,如果出现范围查询,是可以使用索引的。
举个例子吧,看下图:
在这里插入图片描述
在第一个中只会使用name索引,其他索引失效。
在第二个中也会使用name索引,其他索引失效。
在第三个中不使用索引。
在第四个中会使用两个索引。原因:mysql中的优化器会把数据进行调换,将离散性好的数据放在最左边。所以我们在写sql的时候,应该尽量按照索引顺序来,避免优化器的调换。

覆盖索引

所谓覆盖索引是指当我们执行一个sql的时候可以不用去主键索引树中查询行 (不执行回表操作)即能拿到所需要的数据。
使用覆盖索引可以加快查询速度。
在这里插入图片描述
1.用到了,没有去主键索引树中 查询
2.没有,因为select* 是查找所有列。所以为了执行效果,尽量不要写select *。
3.用到了。在username的索引树中会存储列信息和主键索引值
4,没用到
5.用到了。

mysql易错点

when 与group by,having
1 when,group by ,having 可以一起使用,when作用于group by 之前,having作用group by 之后,且必须和group by 同时出现。此时group by 会对when 中经过限制条件选择之后结果进行分组,而having 则是对分组之后的结果添加限制条件,从分组之后的结果中选择出满足条件的记录。
2 having其后所接一般为聚集函数,除having后聚集函数中出现的属性字段外,select语句后的属性字段必须全部出现在group by 子句中。而when后面不能跟 聚集函数作为条件。
**case when **

update empc set sal=case when sal>2000 and  sal<=4600 then sal*1.15
                         when sal>4600 then sal*0.9
                         else sal end; 

  此种用法类似 if ...else 当第一个条件满足时便不会执行 第二个,如果前面条件都不满足时执行else条件
   select cname,case when cource='数学'  then score else 0 end 数学,
        case when cource='语文'  then score else 0 end 语文,
        case when cource='英语'  then score else 0 end 英语
       from tb ;

行变列

select cname,case when cource='数学'  then score else 0 end 数学,
      case when cource='语文'  then score else 0 end 语文,
      case when cource='英语'  then score else 0 end 英语
     from tb ;
``
对每个记录都进行判断,满足任何一个casewhen的条件的都会作为结果放在名为该casewhen 属性字段下。

**top n**

关键词 limit,limit 开始位,选取个数。最好用于无并列情况。当选取最大者(最小者)时,limit 0,1。可以放在子查询中,主查询中。

select deptno,dname from dept where deptno =(select deptno from emp group by deptno order by count(deptno) desc limit 0,1);

子查询几乎可以出现在查询语句的任何位置,但是,当子查询作为查询源和属性字段出现时必须起别名。
mysql 在子查询方面性能比较糟糕.
例如 select * from a where a.id in(select id from b where b.id in (1,2,3))
mysql 会将外层的结果先查询出来然后逐条执行子查询,如果外层结果集很大会导致很慢。

存储过程案例及使用及调试:

CREATE OR REPLACE PROCEDURE P_ETL_F_DFNSBQ_TOP1000  (V_MONTH   IN VARCHAR2,
                                                     V_RETCODE OUT VARCHAR2,
                                                     V_RETINFO OUT VARCHAR2) IS
  /**********************************************************
   *名    称 --%@NAME:P_ETL_F_DFZFPM_TOP1000
   *功能描述 --%@COMMENT:抽取地方级一般公共预算排名前一千的企业
   *执行周期 --%@PERIOD:全量
   *参    数 --%@PARAM:V_BBQ       帐期 YYYYMMDD
   *参    数 --%@PARAM:V_RETCODE    过程执行结果代码(成功:SUCCESS/失败:FAIL/等待:WAIT),输出参数
   *参    数 --%@PARAM:V_RETINFO    过程执行结果描述,输出参数
   *创 建 人 --%@CREATOR: WKS
   *创建时间 --%@CREATED_TIME: 2020-04-20
   *备    注 --%@REMARK:
   *修改记录 --%@MODIFY: 20200505 名称取时间段内最新的 WKS
   *来 源 表 --%@FROM:
   *目 标 表 --%@TO:
   *--字段映射
  ***********************************************************/
  V_USER VARCHAR2(50); --过程当前用户
  V_BBQ  VARCHAR2(100);
  V_ROWCOUNT   NUMBER; --用于保存记录数
  V_PROCNAME   VARCHAR2(1000); --过程名
  V_TABLE_NAME VARCHAR2(1000); --表名
  V_START      DATE;
  --V_YEAR       VARCHAR2(8);
  S_DAY        VARCHAR2(10):=TO_CHAR(TRUNC(TO_DATE(V_MONTH,'YYYY/MM'),'YY'),'YYYYMMDD');
  S_LAST_DAY   VARCHAR2(10):=TO_CHAR(LAST_DAY(TO_DATE(V_MONTH,'YYYY/MM')),'YYYYMMDD');
  S_DAY1       VARCHAR2(10):=TO_CHAR(ADD_MONTHS(TRUNC(TO_DATE(V_MONTH,'YYYY/MM'),'YY'),-12),'YYYYMMDD');
  S_LAST_DAY1  VARCHAR2(10):=TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(TO_DATE(V_MONTH,'YYYY/MM'),'MM'),-12)),'YYYYMMDD');--20200507 wks 先加月再求月底日期,防止2月28 29日


BEGIN

  V_USER       := 'DC_MID';
  V_PROCNAME   := 'P_ETL_F_DFNSBQ_TOP1000';
  V_TABLE_NAME := 'F_BI_IN_DFNSBQ_TOP1000';
  V_START      := SYSDATE;
  --V_YEAR       := SUBSTR(V_MONTH, 1, 4);
  V_BBQ        :=V_MONTH;
  
  P_INSERT_ETL_LOG(V_BBQ,
                   V_USER,
                   V_PROCNAME,
                   V_TABLE_NAME,
                   V_START,
                   '',
                   V_ROWCOUNT,
                   V_RETCODE,
                   V_RETINFO,
                   '');

  IF 1 = 1 THEN
   DELETE FROM M_BI_IN_DFNSBQ_TOP1000 WHERE ACCT_YEAR=V_BBQ;
   COMMIT;

   INSERT INTO M_BI_IN_DFNSBQ_TOP1000
    SELECT V_BBQ ACCT_YEAR, PRIMARY_ID, XZQH, HY_DM, RN
      FROM (SELECT PRIMARY_ID,
                   XZQH,
                   HY_DM,
                   ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY AMT DESC) RN
              FROM (SELECT PRIMARY_ID,
                           --MAX(DECODE(XZQH_RN, 1, XZQH, NULL)) XZQH,
                           MAX(CASE
                                 WHEN SDS_AMT = 0 THEN
                                  DECODE(XZQH_RN, 1, XZQH, NULL)
                                 ELSE
                                  DECODE(SDS_RN, 1, XZQH, NULL)
                               END) XZQH,
                           MAX(DECODE(HY_RN, 1, HY_DM, NULL)) HY_DM,
                           MAX(AMT) AMT
                      FROM (SELECT PRIMARY_ID,
                                   XZQH,
                                   HY_DM,
                                   ROW_NUMBER() OVER(PARTITION BY PRIMARY_ID ORDER BY AMT_XZQH DESC) XZQH_RN,
                                   ROW_NUMBER() OVER(PARTITION BY PRIMARY_ID ORDER BY AMT_HY DESC) HY_RN,
                                   ROW_NUMBER() OVER(PARTITION BY PRIMARY_ID ORDER BY SDS_XZQH DESC) SDS_RN,
                                   SDS_AMT,
                                   AMT
                              FROM (SELECT /*+ PARALLEL(A,20)*/
                                     A.PRIMARY_ID,
                                     A.DIVISIONS XZQH,
                                     A.IND_PHY HY_DM,
                                     SUM(NVL(CITY_DIV_TRAAMT, 0) +
                                         NVL(COUNTY_DIV_TRAAMT, 0)) OVER(PARTITION BY A.PRIMARY_ID, A.DIVISIONS) AMT_XZQH,
                                     SUM(NVL(CITY_DIV_TRAAMT, 0) +
                                         NVL(COUNTY_DIV_TRAAMT, 0)) OVER(PARTITION BY A.PRIMARY_ID, A.IND_PHY) AMT_HY,
                                     SUM(DECODE(SUBSTR(BUDGETSUBJECTCODE, 1, 7),
                                                'AA10104',
                                                NVL(CITY_DIV_TRAAMT, 0) +
                                                NVL(COUNTY_DIV_TRAAMT, 0),
                                                0)) OVER(PARTITION BY A.PRIMARY_ID, A.DIVISIONS) SDS_XZQH,
                                     SUM(NVL(CITY_DIV_TRAAMT, 0) +
                                         NVL(COUNTY_DIV_TRAAMT, 0)) OVER(PARTITION BY A.PRIMARY_ID) AMT,
                                     SUM(DECODE(SUBSTR(BUDGETSUBJECTCODE, 1, 7),
                                                'AA10104',
                                                NVL(CITY_DIV_TRAAMT, 0) +
                                                NVL(COUNTY_DIV_TRAAMT, 0),
                                                0)) OVER(PARTITION BY A.PRIMARY_ID) SDS_AMT
                                      FROM F_BI_IN_RHDZSP_CX_DAY_HZ A
                                     WHERE A.APPLYDATE BETWEEN S_DAY AND S_LAST_DAY
                                       AND A.PRIMARY_ID NOT LIKE '%11111111'
                                       /*AND ASCIISTR(A.TAXPAYNAME) LIKE '%\%'*/
                                       AND NOT REGEXP_LIKE(A.TAXPAYNAME, '(^[A-Za-z]+$)')--20200506 wks 修改为只剔除全英文企业
                                       AND A.BUDGETSUBJECTCODE LIKE 'A%'))
                     GROUP BY PRIMARY_ID))
     WHERE RN <= 1000;

    --名称取时间段内最新的--WKS-20200505
    DELETE FROM M_BI_IN_DFNSBQ_TOP1000_QYXX;
    COMMIT;
    INSERT INTO M_BI_IN_DFNSBQ_TOP1000_QYXX
      SELECT TTT.PRIMARY_ID, TTT.TAXPAYNAME, TTT.TAXPAYCODE
        FROM (SELECT DISTINCT HZ.PRIMARY_ID,
                              HZ.TAXPAYNAME,
                              HZ.TAXPAYCODE,
                              HZ.APPLYDATE,
                              ROW_NUMBER() OVER(PARTITION BY HZ.PRIMARY_ID ORDER BY HZ.APPLYDATE DESC) RN
                FROM M_BI_IN_DFNSBQ_TOP1000 TT, F_BI_IN_RHDZSP_CX_DAY_HZ HZ
               WHERE TT.PRIMARY_ID = HZ.PRIMARY_ID
                 AND HZ.APPLYDATE BETWEEN S_DAY AND S_LAST_DAY
                 AND HZ.BUDGETSUBJECTCODE LIKE 'A%'
                 AND TT.ACCT_YEAR = V_MONTH) TTT
       WHERE RN = 1;
    COMMIT;

    DELETE FROM DC_APP.F_BI_IN_DFNSBQ_TOP1000@BJCZ161 A WHERE A.ACCT_MONTH=V_BBQ;
    COMMIT;

    INSERT INTO DC_APP.F_BI_IN_DFNSBQ_TOP1000@BJCZ161
      SELECT V_MONTH ACCT_MONTH,
             A1.RN,
             A1.PRIMARY_ID,
             QYBC.TAXPAYNAME NSRMC,--名称取时间段内最新的--WKS-20200505
             B1.SK_GKCODE XZQH,
             B1.ORGNAME XZQH_NAME,
             NVL(C1.CODE1, 'VVVV') HY_DM,
             NVL(C1.NAME1, '第三产业其他') HY_NAME,
             A1.B_AMT,
             A1.S_AMT,
             A1.CENT_AMT,
             A1.CITY_AMT,
             A1.COUNTY_AMT,
             A1.S_CENT_AMT,
             A1.S_CITY_AMT,
             A1.S_COUNTY_AMT
        FROM (SELECT /*+ PARALLEL(A,20) USE_HASH(A,B)*/
               RN,
               PRIMARY_ID,
               MAX(NSRMC) NSRMC,
               XZQH,
               HY_DM,
               SUM(B_AMT) B_AMT,
               SUM(S_AMT) S_AMT,
               SUM(CENT_AMT) CENT_AMT,
               SUM(CITY_AMT) CITY_AMT,
               SUM(COUNTY_AMT) COUNTY_AMT,
               SUM(S_CENT_AMT) S_CENT_AMT,
               SUM(S_CITY_AMT) S_CITY_AMT,
               SUM(S_COUNTY_AMT) S_COUNTY_AMT
                FROM (SELECT B.RN,
                             A.PRIMARY_ID,
                             MAX(A.TAXPAYNAME) NSRMC,
                             B.XZQH,
                             B.HY_DM,
                             SUM(TRAAMT) B_AMT,
                             0 S_AMT,
                             SUM(A.CENT_DIV_TRAAMT) CENT_AMT,
                             SUM(A.CITY_DIV_TRAAMT) CITY_AMT,
                             SUM(A.COUNTY_DIV_TRAAMT) COUNTY_AMT,
                             0 S_CENT_AMT,
                             0 S_CITY_AMT,
                             0 S_COUNTY_AMT
                        FROM F_BI_IN_RHDZSP_CX_DAY_HZ A,
                             M_BI_IN_DFNSBQ_TOP1000   B
                       WHERE A.APPLYDATE BETWEEN S_DAY AND S_LAST_DAY
                         AND A.PRIMARY_ID = B.PRIMARY_ID
                         AND B.ACCT_YEAR = V_MONTH
                         AND A.BUDGETSUBJECTCODE LIKE 'A%'
                       GROUP BY B.RN, A.PRIMARY_ID, B.XZQH, B.HY_DM
                      UNION ALL
                      SELECT /*+ PARALLEL(A,20) USE_HASH(A,B)*/
                       B.RN,
                       A.PRIMARY_ID,
                       MAX(A.TAXPAYNAME),
                       B.XZQH,
                       B.HY_DM,
                       0 B_AMT,
                       SUM(TRAAMT) S_AMT,
                       0,
                       0,
                       0,
                       SUM(A.CENT_DIV_TRAAMT) S_CENT_AMT,
                       SUM(A.CITY_DIV_TRAAMT) S_CITY_AMT,
                       SUM(A.COUNTY_DIV_TRAAMT) S_COUNTY_AMT
                        FROM F_BI_IN_RHDZSP_CX_DAY_HZ A,
                             M_BI_IN_DFNSBQ_TOP1000   B
                       WHERE A.APPLYDATE BETWEEN S_DAY1 AND S_LAST_DAY1
                         AND A.PRIMARY_ID = B.PRIMARY_ID
                         AND B.ACCT_YEAR = V_MONTH
                         AND A.BUDGETSUBJECTCODE LIKE 'A%'
                       GROUP BY B.RN, A.PRIMARY_ID, B.XZQH, B.HY_DM)
               GROUP BY RN, PRIMARY_ID, XZQH, HY_DM) A1,
             D_IN_ORGCODE_17 B1,
             (SELECT * FROM D_HY_QM T WHERE T.DHY_HYZT = '01') C1,
             M_BI_IN_DFNSBQ_TOP1000_QYXX QYBC--名称取时间段内最新的--WKS-20200505
       WHERE A1.XZQH = B1.SK_GKCODE(+)
         AND A1.HY_DM = C1.CODE1(+)
         AND A1.PRIMARY_ID=QYBC.PRIMARY_ID;
    COMMIT;


    V_RETCODE := 'SUCCESS';
    V_RETINFO := '执行成功!';

    P_UPDATE_ETL_LOG(V_BBQ,
                     V_USER,
                     V_PROCNAME,
                     V_TABLE_NAME,
                     V_START,
                     SYSDATE,
                     V_ROWCOUNT,
                     V_RETCODE,
                     V_RETINFO,
                     '');
  END IF;

EXCEPTION
  WHEN OTHERS THEN
    V_RETCODE := 'FAIL';
    V_RETINFO := SQLERRM;
    P_UPDATE_ETL_LOG(V_BBQ,
                     V_USER,
                     V_PROCNAME,
                     V_TABLE_NAME,
                     V_START,
                     SYSDATE,
                     V_ROWCOUNT,
                     V_RETCODE,
                     V_RETINFO,
                     '');

END;

mysql索引详解 MySQL的存储引擎架构将查询处理与数据的存储/提取相分离 阅读详情

相关推荐

简单初识 Material Point Method(MPM)

简单初识 Material Point Method(MPM):先介绍了Lagrangian和Eulerian,并简单介绍了MPM Method

qq_45776432的博客 7367

Mysql联合索引的原理与实现

上一篇中已经讲过了索引相关的知识,为什么还要在讲一下联合索引(二级索引),是因为这个知识点特别重要,不论是在面试中,还是在实际的使用过程中,理解和掌握联合索引,是我们提升数据库查询优化操作或者提升性能的重要手段之一。Mysql从物理存储上将索引上分为:分为聚簇索引和非聚簇索引主键索引也被称为聚簇索引(clustered index),也叫作聚集索引。其余都称呼为非主键索引也被称为二级索引(secondary index),也叫作辅助索引。

LY83984的博客 1816

Anaconda启动失败,一直在loading application的问题

实战基础新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本

Tristan的博客 2771

#### 联合索引存储结构 ####

例如表数据如下: bcd三列组成一个联合索引,在B+树上的结构图: 对于联合索引来说只不过比单值索引多了几列,而这些索引列全都出现在索引树上。对于联合索引,存储引擎会首先根据第一个索引列排序,如上图我们可以单看第一个索引列,横着看, ,,c=4在c=5前面,以及,,就可以说明这种情况。`当我们的SQL语言可以应用到索引的时候,比如 也就是T1表中a列为4的这条记录。存储引擎首先从根节点(一般常驻内存)开始查找,第一个索引的第一个索引列为1,12大于1,第二个索引的第一个索引列为56,12小于56,于是从这.

仅做个人笔记 1668

Fluent基于低氧舱气体交换仿真(氮气与空气混合)

一、背景概述 模拟低氧舱充氮气和排除混合气体的过程,假设注入95%的氮气,舱内原有气体为空气,压力为标准大气压,温度为300K。观察气体注入过程中,舱内平均氮气和氧气浓度的变化。 二、Fluent设置 Setup 1、General type选择压力基 绝对速度 瞬态 重力勾选 2、Model 能量方程开启 组分运输开启,设置方法如下: 选择后OK,view就会变成Edit,点击Edit。然后再次点击Edit。 将组分中的非氮气氧气和空气的气体移除,右边选项需要将空气放在最后一位。 3、Materi

qq_35535616的博客 1万+

短视频团队架构&工作流程---2025.3.30

1、负责短视频日常内容分发上线,包括视频头图、标题、简介、推荐位及部分内容元数据的日常导入、审核、上线、下线,并提供各品类短视频的内容上线计划表。(20)运营:视频推送后,实时跟进视频数据,定期统计分析数据报表,根据数据表现 找到问题,并发送给各个小组的负责人,对下一期视频内容进行调整。(4)运营:收到成片,设计视频头图、标题、简介、推荐位等,分发到各个平台,统计分析视频的数据,对各个平台的视频进行管理、用户互动等。1、负责影视、戏剧、广告、专题片等的策划、组稿选题、材料收集、内容策划。

超越神明 2153

MySQL--case when的用法 以及 利用case when 和 group by 实现行转列

MySQL–case when的用法 在MySQL中case when有两种用法: 1.简单函数 CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END 2.搜索函数 CASE WHEN [expr] THEN [result1]…ELSE [default] END 简单函数: CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END 这种用法就是 匹配列的值,

weixin_42051673的博客 2605

《大明王朝1566》中,朝廷财政危机无法解决的根源分析

财政困局中的财富最终流向三重黑洞:​皇室挥霍​(如嘉靖炼丹修殿)、特权阶层贪腐​(严党年入百万两盐税)、制度性损耗​(宗室供养、低效官僚)。更深层的“钱”其实是被禁锢在道德化治理的牢笼中——当国家用“黄河长江皆可为用”的权术思维替代制度性改革时,财政危机便成为帝制王朝无法逃脱的宿命。

为了小家奋斗 1968

MySQL索引之联合索引

目录联合索引联合索引的存储结构建表 联合索引 在平时开发中,我们最常见的是聚集索引,但在我们需要多条件查询的时候,就不得不建立联合索引,来提高我们的查询效率 联合索引:也称复合索引,就是建立在多个字段上的索引。联合索引的数据结构依然是 B+ Tree 一颗 B+ Tree 只能根据一个值来构建,所以联合索引使用 最左 的字段来构建 B+ Tree 联合索引的存储结构 建表 CREATE TABLE `t1` ( `a` int(11) NOT NULL AUTO_INCREMENT, `b`

桐花思雨 2万+

OpenClaw 报错 npm install failed; cleaning up and retrying...:原生模块编译失败

本文针对OpenClaw项目在部署时出现的"npm install failed"报错问题进行分析,指出该问题源于Node.js原生模块编译链缺失。文章详细列举了常见触发原因,包括缺少gcc/make、Python版本不符、Node版本过新等,并提供了五种解决方案:安装完整编译环境、配置node-gyp Python、重新编译原生模块、切换Node版本以及单独重建失败模块。最后强调在国产服务器环境下部署AI工程时,补齐编译环境和使用稳定Node版本是解决问题的关键,该方案可复用解决

博客 1798

分布式训练中All-Reduce、All-Gather、Reduce-Scatter原理

Reduce-Scatter = 先对所有进程的数据做 Reduce(如 sum / mean),再把结果“切分”分发给各进程。(是 Reduce + Scatter 的融合操作。

comli_cn的博客 341

Mysql 联合索引(聚合索引)数据结构

比方说联合索引 (col1, col2,col3),我知道在逻辑上是先按照col1进行排序再按照col2进行排序最后再按照col3进行排序。col1, col3 ,col2 会走索引(SQL优化器进行优化)最终变成 col1, col2,col3。col1,col3 会走索引 只不过走col1的索引 但是效率比col1, col2,col3 慢。col2,col3 不会走索引 因为首先存储通过col1 > col2

qq_16749001的博客 1622

《网络存储技术》形考实训4:为小微企业搭建基于Windows Server的文件共享与权限管理服务

本文介绍了在域环境下部署DFS分布式文件系统的完整流程。项目目标是将3台存储服务器(NS1、NS2、NS3)上的多个共享文件夹通过DFS命名空间进行统一整合,使员工可通过单一访问路径访问所有资源。实施步骤包括:1)搭建AD域环境并创建用户/组;2)将存储服务器加入域并配置共享权限;3)在域控制器安装DFS命名空间角色;4)创建基于域的命名空间(\xc.cn\共享);5)将各服务器共享文件夹映射到命名空间;6)进行客户端访问验证。通过DFS实现了物理存储位置不变情况下的逻辑统一访问,提高了文件管理的便捷性和可

深耕计算机专业知识与技术。 946

mysql索引的详解

摘要:索引是数据库用于快速查询数据的数据结构,类似字典目录。合理使用索引能提升查询速度,但会降低写入性能。创建索引需谨慎,建议单表不超过5个。适合建索引的字段包括主键、外键、高频查询字段等;不适合的包括极少查询、低区分度或大文本字段。索引分为普通、唯一、全文和组合索引,组合索引遵循最左匹配原则。使用索引时需注意查询条件顺序,避免范围查询影响索引效果。正确使用索引能显著提升性能,错误使用则可能导致索引失效。

qq_39244069的博客 79

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MySQL索引【详解】

文章目录第一篇 什么是索引?1、来看一个问题方案1方案2方案3方案42、索引是什么?第二篇 MySQL索引原理详解1、背景2、预备知识什么是索引?磁盘中数据的存取mysql中的页数据检索过程3、我们迫切的需求是什么?(数据结构和算法)3.1、循环遍历查找3.2、二分法查找3.3、有序数组3.4、链表单链表双向链表3.5、二叉查找树3.6、平衡二叉树(AVL树)3.7、B-树3.8、B+树3.9、Mysql的存储引擎和索引3.10、页结构数据检索过程对page的结构总结一下第三篇 MySQL索引管理1、索引分

wang_luwei的博客 7269

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Mysql 索引详解

B-Tree 索引:适用于范围查询和等值查询,采用 B+Tree 数据结构,广泛用于默认的索引。哈希索引:适用于等值查询,底层通过哈希表实现,不支持范围查询。全文索引:专门用于文本搜索,采用倒排索引,支持复杂的文本匹配。空间索引:用于存储和查询空间数据(如地理位置),采用 R-Tree 数据结构。每种索引类型的选择都应该根据具体的查询需求来决定,理解它们的底层实现有助于优化数据库性能。

qq_35082497的博客 1016

MySQL索引详解

索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。

zhaolk的博客 8889

【MySQL】MySQL 索引详解

MySQL索引与约束概述 MySQL索引是一种特殊的数据结构,用于加速数据查询,主要包括以下几种类型: 主键索引:唯一标识记录,具有唯一性和非空特性 普通索引:基础索引类型,无约束性 唯一索引:保证数据唯一性 组合索引:多列联合索引,遵循最左匹配原则 全文索引:针对文本内容的高效分词检索 索引的作用包括加速查询、优化排序等。InnoDB表必须有主键,可通过显式设置、非空唯一索引或自动生成_rowid来实现。约束条件保证数据的完整性和一致性。

Antonio915的博客 2032

Mysql索引详解

索引可以极大的提升Mysql的数据检索速度,类似于书籍的目录,可以根据目录的章节标题快速定位到书中的内容。但索引在提高查询速度的同时需要额外的存储成本和维护成本,会降低对表更新操作的速率。 01 | 索引类型 1.1 普通索引 最基本的索引类型,基于普通字段建立的索引,没有任何限制。 1.2 唯一索引 在普通索引的基础上,要求字段值必须唯一,但允许NULL值 1.3 主键索引 特殊的唯一索引,不允许NULL值且一个表只能有一个主键 1.4 复合索引 1.5 全文索引 ...

源码有毒的专栏 376

【MySQL】索引原理详解

本文详细介绍了MySQL索引原理及优化实践。主要内容包括:索引基础概念(提高查询速度但占用存储空间)、不同类型索引(主键、唯一、普通、全文、复合索引)、B+Tree数据结构特点(适合范围查询)、聚簇索引与非聚簇索引区别(是否回表)、联合索引的最左前缀原则,以及索引优化技巧(避免全表扫描、使用覆盖索引、防止索引失效)。文章还总结了常见易错点和面试高频考点,强调合理设计索引和EXPLAIN验证的重要性。掌握这些知识可显著提升SQL查询性能。

2301_81481532的博客 758

MySQL 索引详解

如果一个索引包含(或者说覆盖)所有需要查询的字段的值,我们就称之为“覆盖索引”。我们知道InnoDB存储引擎中,如果不是主键索引,叶子节点存储的是主键+列值。最终还是要“回表”,也就是要通过主键再查找一次。这样就会比较慢覆盖索引就是把要查询出的列和索引是对应的,不做回表操作!

Beau Wang 1502

[MySQL]索引详解

索引就是帮助存储引擎快速获取数据的一种数据结构 , 形象的说:"索引就是数据的目录".

Node_Hao的博客 2215
下一篇: linux学习内容总结
date-date
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值