一个比如与InnoDB索引的几个概念sohu - 众发娱乐

一个比如与InnoDB索引的几个概念sohu

2019-02-11 09:37:22 | 作者: 惜梦 | 标签: 索引,数据,比方 | 浏览: 4184

    因为regdate对错聚簇(secondary index)索引,独自存于另一棵树。 咱们知道运用非聚簇索引时,需求读行数据的时分,需求再到聚簇索引中获得。明显SQL2不会再读一遍全数据(不然功能必定低于SQL1)。

    而其原因是掩盖索引(covering index)。 非聚簇索引的叶节点上是聚簇索引的字段值,需求取数据时,依据这个值再去聚簇索引上取。而这时InnoDB变“聪明”了, 需求取的值仅仅id,而id作为聚簇索引的key信息,现已得到,不需求再到聚簇索引中读取数据。

    因为regdate索引树上只要regdate和主键(id)的信息,因而数据量远小于全表数据,因而SQL2的读盘量小于SQL1,履行速度快。

 

5、其他 

    这个比方涉及到几个概念, 聚簇索引(cluster index)、非聚簇索引(secondary index), 掩盖索引(covering index),还有磁盘的数据寄存。都算是一些根本的内容,却是平常见到的一些优化的理论基础。举几个比方如下:

1)      咱们常常被劝诫select之后只填最有必要的字段

    其间的一个原因是削减网络传输。但不必定能够提高服务器履行功能。比方比方中的表,select  * from u where id = n; 与select user_name from u where id =n相同。

    当然有些时分作用会很抱负,比方 select id from u where regdate=xxx 就比select * from u where regdate=xxx快许多,原因已阐明。

2)      查询契合条件的第10w个记载开端的10个记载。

    这个比方在其他博文上被屡次提及,

select * from t order by a limit 100000, 10; 能够改善为

select * from t where a =(select a from t order by a limit 100000,1) limit 10;

    在笔者环境中功能提高约1000倍。

    原因即在于, 改善句子中,子查询中的排序只在非聚餐索引a上履行,因为掩盖索引,排序进程不需求拜访聚簇索引。实践读读取全数据的只要10条记载,而原句子则需求读一切记载的全数据。

    当然履行排序的进程耗费是相同的。 

 

6、完毕

    回到最初,假如只需求查id满意特定条件的记载总数,能够运用select sum(id % 10000 = 0) from u force index (`regdate`);  

    把sum(id %10000=0)换成其他操刁难履行功率均没有影响。 

    但若查询内容中呈现除id和regdate外的其他字段,则force index优化无效,可自行剖析。

 

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表众发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2

    Oracle 简略运用huabian

    运用,数据库,用户
  • 3
  • 4
  • 5

    MySql标准fenghuang

    标准,进程,修正
  • 6

    数据库相关itjob

    触发器,时刻
  • 7
  • 8
  • 9

    oracle extractITeye环球

    部分,类型,时分
  • 10