存储单位从小到大的关系
存储单位从小到大的关系为:8b=1B、1024B=1KB、1024KB=1MB、1024MB=1GB、1024GB=1TB、1024TB=1PB,等等。存储单位一般用bit、B、KB、MB、GB、TB、PB、EB、ZB......来表示。
存储单位从小到大的关系
在计算机中,信息都是釆用二进制的形式进行存储、运算、处理和传输的,位(bit)是计算机数据中最小单位。
存储单位的换算率约等于1000.为1024.常用的单位按照从大到小的顺序排列为T、GB、MB、KB、B。
存储单位的换算实例:一个标称是100GB的U盘,其实际容量为:(100×1000×1000×1000)B /(1024×1024×1024)≈93.1G。
插柳、戴柳……清明这些习俗与柳有关
“清明一霎又今朝,听得沿街卖柳条。”清明时节,柳树抽出新芽、写满春意。自古以来,人们都喜爱柳树,在春意盎然的清明时节,也形成了许多与柳有关的民间习俗。
清明时节,花红柳绿(李晓卫摄/光明图片)
“清明,插柳叶于门,簪柳于首,曰辟毒疫。”清同治二年本《宣恩县志》所载内容道出了清明插柳、戴柳的习俗。中国民协副秘书长、历史学博士侯仰军告诉记者,早在南北朝时期,就有了关于插柳习俗的文献记载,但当时的插柳活动主要集中于正月进行而非清明节期间。这种情况在唐代有所变化,《景龙文馆记》记载说唐中宗曾在三月三日赐给侍臣细柳圈,据说戴上可以避免瘟疫和蝎子一类毒虫的危害。唐代以后,清明节插柳、戴柳逐渐成为我国绝大多数地区民众的常见做法,所以清明节还有“插柳节”的别称。
插柳究竟是将柳条插在哪里呢?“通常会插在自家大门上、屋檐下,也有插在坟头上的,还有插在瓶子里供奉于佛像神灵前的……”侯仰军说。在不同地方插柳的寓意也有所不同,如《宣恩县志》所载,将柳条插于门上有避瘟疫、祛不祥的含义。如今在河北张北,人们还保留着清明节将柳条插于门窗、屋檐下的习俗,希望以此除疾病、求吉祥。
侯仰军回忆,在自己的家乡山东微山,人们将柳条插在床头以避蝎子、蚰蜒等虫害,“还会用柳条边在墙壁处轻轻抽打,边念念有词‘一年一个清明节,杨柳单打青帮蝎,白天不准门前过,夜里不准把人蜇’”。由此看来,清明的柳条和端午的艾叶、菖蒲一样都有着避虫害的“功效”。
在江苏、浙江、陕西、湖北、东北一些地区,人们清明祭扫时会在坟上插柳。据侯仰军介绍,在坟上插柳的意思是昭示后继有人,此外,柳为“留”字的谐音,在坟头插柳,也有表达对逝去亲人的怀念之意。
清明时节正值春耕春种的关键时期,插柳也有表达人们对农作物生长的美好期许。在江苏无锡一带,农民通常会在门前晒场周围、自家农田的田埂旁插柳,俗信“清明插绿柳,稻麦长过头”。
清明前夕,小朋友展示自己编制的柳条帽。(邓龙华摄/光明图片)
同样,戴柳习俗也因地域不同而有所差异。我国不少地方流传着“清明不戴柳,红颜成皓首”“清明不戴柳,死在黄巢手”等俗语,可见,人们认为清明戴柳可以青春常驻、延年益寿。在北京、天津、河北、河南、湖北等地则有民谚“清明不戴柳,死了变猪狗”,表明人们认为清明节这一天戴柳与否,将关系到死后能否转世。据侯仰军介绍,人们通常会将柳枝、柳叶编成的柳圈,或是捋成的柳球进行佩戴。佩戴的地方也不尽相同,有戴在头上的,有挂在项间的,也有佩戴在衣服上的。“无论戴在哪里,新鲜柳枝上的新绿,都表达着人们心中的那份美好。”侯仰军说。
除了插柳、戴柳外,一些地方还有服柳叶、吹柳笛的习俗。如在江苏瓜洲,清明早晨要用清水吞下七个柳叶芽;又如在上海,人们用柳条将祭余的蒸糕饼团贯穿起来,存放到立夏日,用油煎后给小孩吃,俗信可以不疰夏。侯仰军回忆自己小时候,喜欢将柳枝折断,简单处理后做成柳笛吹着玩,在美好春光中尽情欢乐。
又是一年清明时,杨柳依依道春意。“人们不妨在门前插上柳条,或折一个柳圈戴在头上,在感受清明习俗的同时,尽享美好春色。”侯仰军说。
(光明网记者 张倩)
来源: 光明网
最左匹配原则的理解
Mysql的innodb存储引擎采用B+树来存储索引和数据,为什么采用B+树,可考虑磁盘随机读和顺序读,磁盘IO次数,以及innodb最小存储单位16K方面,本文主要讨论联合索引的存储结构。
主键索引的存储结构,索引项是一列主键的值,树的每一层都是按照主键列的从小到到顺序排序的,要查找指定元素的过程是按照二分查找原则,小于比较元素则往左孩子找,大于则往右孩子查找,一直从根结点到叶子结点,对于范围查找来说,根据B+树的每一层都是有顺序的链式存储的,可以根据定位到的叶子结点的左侧的最小范围从小到大一直链式next查到最大范围,但具体才不采用回表查或者是否采用索引下沉要根据查询结果和查询条件来看,不做具体分析。
主键索引
我们来看下联合索引的存储结构,联合索引的索引项有多个列组成,比如b,c,d列组成的联合索引,在B+树的存储结构是,每个节点的KV的K是三个索引列组成的值,V对于叶子结点是主键值,非叶子结点存储的是仍是三个索引列的值。
联合索引的存储
和主键索引不同的是索引列是多列组成的。网上不少博客说由最左边的单列存储的b组成的是错误的。联合索引的查找过程的原理是一样的,都是按照顺序存储的,只是索引的本质原理,对于多列的如何顺序的排序呢,那就是先按照一列排序,相同的列按照第二个列排序,第二个列相同则按照第三个列排序,所以定位元素过程仍然根据二分查找原理,先定位最左边的元素,从根结点定则到叶子结点,如果叶子结点的值匹配上最左边的索引列,则命中第一个索引,然后根据查询条件继续定位,如果查询条件不按照索引顺序来,排除sql的优化后,比如查询条件是b=2和d=3,b可以轻松命中索引,对于d=3无法根据二分查找来定位,d的索引失效,如果d=2的元素很多,占了总表的很大比例,又需要不断的回表查询,此刻会退化到全表查询。
索引失效的例子:
(1)select * from testTable where b1 and c=2
首先b字段在B+树上是有序的,所以可以用二分查找法定位到1,然后将所有大于1的数据取出来,b可以用到索引。
c有序的前提是b是确定的值,那么现在b的值是取大于1的,可能有10个大于1的b,也可能有一百个b。
大于1的b那部分的B+树里,c字段是无序的(图二),所以c不能在无序的B+树里用二分查找来查询,c用不到索引。
(2)like索引失效例子
where name like a%
where name like %a%
where name like %a
为什么%放在右边有时候能用到索引
一、%号放右边(前缀)
由于B+树的索引顺序,是按照首字母的大小进行排序,前缀匹配又是匹配首字母。所以可以在B+树上进行有序的查找,查找首字母符合要求的数据。所以有些时候可以用到索引。
二、%号放右边
是匹配字符串尾部的数据,尾部的字母是没有顺序的,所以不能按照索引顺序查询,就用不到索引。
三、两个%%号
这个是查询任意位置的字母满足条件即可,只有首字母是进行索引排序的,其他位置的字母都是相对无序的,所以查找任意位置的字母是用不上索引的。
总结:之所以会有最左前缀匹配原则和联合索引的索引构建方式及存储结构是有关系的。
本文来自自欺欺人投稿,不代表美啦巴巴立场,如若转载,请注明出处:https://www.meila8.com/1/1732.html