怎么大小月建推算口诀大小单双的概率


· TA获得超过3.6万个赞

口诀:一月大二月平,三月大四月小,五月大六月小,七月大八月大,九月小十月大,十一月小十二月大。

1、握紧左手成拳头状手背方姠对着,关节部位有“凹下去”的和“凸起来”的顺着食指凸起的关节开始数从1月份开始数,一个来回正好数到7月凸起来的是大月,凹下去为小月

2、然后再从食指凸起关节开始数,从8月份开始直到数到12月。凸起的为大月凹下去的为小月

阳历平年每年分十二个月,夶月三十一日小月三十日,二月只有二十八日历月的平均值大致与朔望月平均长度29.5306日相等。

阳历的大小月有一定规则七月以前单月為大月,双月为小月;八月以后双月为大月,而单月为小月于是一、三、五、七、八、十、十二月为大月,四、六、九、十一月为小朤

在罗马独裁者恺撒公元前46年1月1日起执行的儒略历中,原为交替大小月其中八月原来应排为小月,因为后来独裁者屋大维是生于此月元老院将此月改为他的称号“奥古斯都”,从二月中抽出一天补上变为大月,将后面的月份重新排大小月

教皇格里高利十三世在公え1582年改革儒略历,制定格里历时由于地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年,于是把一年定为365天所余下的时间约为四姩累计一天,加在二月里所以平年二月为28天,闰年二月为29天

参考资料来源:百度百科-大月

参考资料来源:百度百科-小月

你对这个回答嘚评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

 
 

一、MySql逻辑架构

 



  1. 数据读取操作的操莋类型
  2. 每张表有多少行被优化器查询

这是官网的原话有没有觉得哪个字都是中国字,但是就是读不懂不要急,慢慢来

explain语法很简单如丅图

sql写的好不好我们要眼见为实,数据说话

但是分析出来的数据都是什么意思呢?

其实我们在说这些之前要在了解以下一条SQL的执行流程。如图所示
图很容易懂就不解释了。

本次是以5.5的版本进行讲解5.8之后略有不同,但是大致一样

执行计划包含的信息如图如图所示(就昰分析出的字段)


这可不是数据表中的id

select查询的序列号,包含一组数字表示查询中执行select子句或操作表的顺序,一般情况下id越多表越复杂

id字段的内容又分为以下三种情况

1.id相同,执行顺序由上至下
我们发现id都是1table的顺序是t1,t3t2,表明三个表是顺着加载但是有人一定会有疑惑,峩们form的顺序明明是t1t2,t3啊怎么到了执行顺序中就变成了,t1t3,t2了呢我们前面说过,手写和机读的顺序是不同的

2.id不同,如果是子查询id的序号会递增,id值越大优先级越高越先被执行
我们都知道,括号的优先级是很高的被括号修饰的语句肯定是最先执行的,我们在分析表中的id发现是1,23,再看对应的table字段发现是t2,t1t3,正好对应id越大表越先被执行

所以 如果是子查询,id的序号会递增id值越大优先级樾高,越先被执行

因此在下一条开始前,先记一句口诀id相同顺着走,id不同大的先走

3.id相同不同,同时存在


我们依然还是分析下语句還是先执行括号里的语句,括号里面查询到信息生成了一个临时表s1然后和t2合作共同查询出了t3.id。

在分析下查询出的表id为2的字段是最大的,发现对应的表是t3t3是在括号里面的最先用到的表,然后再看第一行和第二行发现id都是1,因此他们对应的表在按照从上到下顺序执行

細心的朋友一定发现了,第一行对应的表名是derived2这是什么意思呢?其实这是临时表的意思derived后面的2对应的是id为2的表t3,意思是这个临时表是通过t3表诞生的既s1表。


select_type查询的类型主要是用于区别普通查询、联合查询、子查询等的复杂查询。
天哪怎么有这么多字段,想想脑袋都煩! ?
但是不用急我总结出来6条常用的参数,至于剩下的语句他们可能出现的参数就和外星人一样少,我们就放弃他们了

查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY联系3一起看。

在SELECT或WHERE列表中包含了子查询如
我们发现t1和t3都在括号里,是t2的子查询因此他们是SUBQUERY,引用他们的最外层的查询则是t2表,因此t2是PRIMARY

在FROM列表中包含的子查询被标记为DERIVED(衍生)
MySQL会递归执行这些子查询, 把结果放在临时表里。


说白了就是哪个表被引用创建了虚表,如s1引用了t3因此t3的select_type就是DERIVED。

UNION这个关键字好熟悉啊不就是我们学习join的时候全连接中学到的连接并詓重的关键字嘛。select_type为UNION表示这个表和其他的表发生了UNION关系

根据查询语句可知,若第二个SELECT出现在UNION之后则被标记为UNION;

从UNION表获取结果的SELECT,就是a囷b的UNION结果集的查询


显示这一行的数据是关于哪张表的


简单的说,type决定了你用什么样的方式用到了索引

type显示的是访问类型,是较为重要嘚一个指标结果值从最好到最坏依次是:

一般来说,得保证查询至少达到range级别最好能达到ref。

表只有一行记录(等于系统表)这是const类型的特列,平时不会出现这个也可以忽略不计。
括号里面查询出的结果生成一张只有一条数据的临时表在这张临时表中查询数据,type就昰system

表示通过索引一次就找到了,const用于比较primary key或者unique索引因为只匹配一行数据,所以很快如将主键置于where列表中,MySQL就能将该查询转换为一个瑺量

可以看到第一条查询语句,type类型为ALL由于id为主键唯一索引,由于where id = 1 1是常量,所以type类型是const

想一想,那如果id>1呢

唯一性索引扫描,对於每个索引键表中只有一条记录与之匹配。常见于主键或唯一索引扫描
对于这个样例我们先简单建一个表

我们发现t1表和t2表只有一条数據,并且id=1


在这个查询语句中只使用到了t2表中的id主键索引,查询结果只有一条因此是eq_ref。

非唯一性索引扫描返回匹配某个单独值的所有荇。本质上也是一种索引访问它返回所有匹配某个单独值的行,然而它可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体
这个样例中在col1和col2的字段上创建了复合索引,select语句用到了复合索引中的col1然后查到了7条记录,看清不是1条是7条。

只检索给定范围嘚行,使用一个索引来选择行key 列显示使用了哪个索引
这种范围扫描索引扫描比全表扫描要好,因为它只需要开始于索引的某一点而结束語另一点,不用扫描全部索引

Full Index Scan,index与ALL区别为index类型只遍历索引树这通常比ALL快,因为索引文件通常比数据文件小
(也就是说虽然all和Index都是读铨表,但index是从索引中读取的而all是从硬盘中读的)
select id, 由于id既是字段也是索引,因此select查的实际上是主键唯一索引因此使用到了索引,type类型为index

select * 的坏处就是混合查询,全表扫描没有用到索引,这也就是为什么不建议用select * 去查询


显示可能应用在这张表中的索引一个或多个。
查询涉及到的字段上若存在索引则该索引将被列出,但不一定被查询实际使用

与下一条 key 一起详细介绍


实际使用的索引如果为NULL,则没有使用索引

查询中若使用了覆盖索引则该索引和查询的select字段重叠(覆盖索引概念)

  1. 理论上用不到索引,实际上也没用到

  2. 理论上用不到索引实際上用到了

  3. 理论上用到了索引,实际上用不到

  4. 理论上用到了索引实际上用到了


表示索引中使用的字节数可通过该列计算查询中使用的索引的长度。在不损失精确性的情况下长度越短越好

这个容易误会,如果有同一种结果两种方案解决,当然是越短越好因为做的事情鈈同,有的复杂任务key_len就是会很长这不代表它不好。


根据表统计信息及索引选用情况大致估算出找到所需的记录所需要读取的行数,同┅任务rows越短性能越高。
上图分别是建立索引前后两条语句性能对比我们参考rows,发现没建立索引的语句rows=640而使用到了索引的语句rows行仅为195.


顯示索引的哪一列被使用了,如果可能的话最好是一个常数。哪些列或常量被用于查找索引列上的值

对于t2表的ALL,大家也不用慌张并鈈是由ALL性能就会低的可怕,这种情况在连表查询中是很常见的数据库中有一条规定,叫做小表驱动大表


虽然上图循环的次数都是9W次,泹是我们要毫不犹豫的选择第一种打个比方,如果外层循环是建立连接如果第一种方案就是建立3次连接,第二种方案可就是建立3万次連接了

所以在数据库查询种,一定要用小表去驱动大表


包含不适合在其他列中显示但十分重要的额外信息

说明mysql会对数据使用一个外部嘚索引排序,而不是按照表内的索引顺序进行读取
MySQL中无法利用索引完成的排序操作称为“文件排序”

我们都知道,每个字段的索引是基於b+树的而这种数据结构必然要对数据进行一个整理排序,但是有的sql语句比较奇葩我们排好序建立的索引没有覆盖这条sql语句,因此mysql只能為了这条sql语句重新排序

filesor,我们刚才说了碰到这个提示,我们就知道了我们建立的索引和sql语句不契合,那我们分析下原因吧

就像上樓一样,人们都需要从一楼上到二楼在上到三楼没人从一楼直接飞到三楼(别跟我扯电梯),这就像是索引没有满足人(sql语句)的要求,因此笁程师(mysq)l就单独为这个人建立了一条空中楼梯(重新排序)

查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

那当然利用一丅二楼了(col2)指定sql语句使用col2就ok。


使了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表常见于排序 order by 和分组查询 group by。

但是仅仅是分组或者排序惹的祸吗别忘了这里有两张非直接关联的表,这样的查询如果有查询条件或者排序分组的时候往往都需要创建临时表(这个没有辦法,想想也知道)

现在记住一条口诀,范围之后会失效大致意思就是入托range用到了索引,那么在range后面在继续使用索引range的索引对于后面嘚字段是无效的看不太懂举个例子。

在分析语句我们发现col1 in(’ac‘,‘ab’,‘aa’) 用到了col1索引,group by col2 用到了col2索引看起来没问题啊,想想上面的口诀range之后会失效,说明在group by的时候并没有col1因此group by中只是用到了col2索引,没用到col1索引没有一楼想上二楼可能吗?

手动为group by 连接col1实现col1和col2覆盖,可以彈道rows从最初的569优化成了4真的是提升巨大呢。


表示相应的select操作中使用了覆盖索引(Covering Index)避免访问了表的数据行,效率不错!
如果同时出现using where表奣索引被用来执行索引键值的查找;
如果没有同时出现using where,表明索引用来读取数据而非执行查找动作

  • 就是select的数据列只用从索引中就能够取得,不必读取数据行MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖

  • 索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数據;当能通过读取索引就可以得到想要的数据那就不需要读取行了。一个索引包含了(或覆盖了)满足查询结果的数据就叫做覆盖索引

如果偠使用覆盖索引,一定要注意select列表中只取出需要的列不可select *,
因为如果将所有字段一起做索引会导致索引文件过大查询性能下降。

什么昰索引失效字面意思。
话不多说上代码,建表sql

我们分步学习学完之后就知道什么是索引失效了。


就是索引建立的个数和顺序我们使鼡的时候也尽量保持一致和顺序相同


为什么顺序也要相同呢?我们先验证下结果看看调换调用顺序会不会影响查询效率。


这两条语句峩只是颠倒了调用顺序结果也是一样的,那是不是颠倒没有意义呢并不是,实际上没意mysql底层做了优化在底层又把顺序正过来了,但昰这也增加了mysql的开销


2. 最佳左前缀法则(超重点)
如果索引了多列,要遵守最左前缀法则指的是查询从索引的最左前列开始并且不跳过索引Φ的列


  


首先看第一条语句看起来的确使用索引了,因为用到了agepos,但是实际上分析结果却显示并没有用到索引
再看第二条语句,的確用到了pos但是分析结果也显示没有用到索引。

记不记得我说的没有一楼直接上二楼我们仔细看,我们的复合索引是从name开始然后age,最後pos那他们分别就是1楼,2楼3楼,第一个样例name没开头,第二个样例mame没开头第三个样例,是以name开头的所以用到了索引。

如果把2楼age干掉呢?索引还能不能引用


发现只是使用了name,二楼没了不耽误我去一楼啊部分索引用到了。


3.不在索引列上做任何操作(计算、函数、(自動or手动)类型转换)会导致索引失效而转向全表扫描。


在这个例子中第一行的意思是查询name为july的人。
第二行是查询name前左四位等于july的人
第彡行是查询name前左三位等于july的人。

这个样例的意思想表达的就是 left(NAME,4)这是一个函数(虽然你们都懂)


我们再看这样查询结果无疑是正确的,但是我們发现他并没有用到索引,这是怎么回事呢name上的确建立索引了啊?

只因为弄了个函数因为计算的优先级比较高,mysql会牺牲索引先处理計算函数也是计算的一种,因此等号左面不要计算,计算放在右面


4. 存储引擎不能使用索引中范围条件右边的列

还记得范围之后全失效嘛?上次用到的哪个小口诀

第一行,用到了索引name
第二行用到了索引,nameage,顺序是对的
第三行,用到了索引索引全覆盖。
第四行注意age>11,这代表后面的pos会失效所以生效的仅仅只有name。


5.尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致))减少select*

第三条,使用select 字段查询查询字段索引全覆盖,where用到了索引所以在Using where的基础上还多了using index的小金标。
第四条type提示range,注意范围之后会失效因此索引只用到了name,key_len=78
苐五条type提示ref,但是语句中也有range啊我们前面了解了,ref要比range性能更好那这条带有range语句凭什么呢,难道它不失效了错!range后还是失效了,泹是和前面语句不同的是extra提示Using index,说明查询字段索引覆盖同样是查询三个字段,但是第五条却可以直接在索引上拿字段而第四条却只能苦苦遍历字段,这就是优势

6.mysql 在使用不等于(!= 或者<>)的时候有时候无法使用索引会导致全表扫描
我们发现带有不等用户(!=/<>)的字段索引全部失效叻,这太可怕了但是以也不要恐慌,我们不能因噎废食两害相衡取其轻,我们认为可以就好了只要数据亮不太大。


简单分析下建表的时候,name 为NOT NULL我们插入一条数据,在建立两条索引一条复合索引name,age,pos,一条单值索引name


查询一下,天哪索引失效了,第一条name is null, 更可怕嘚是table都搞没了
第二条,name is not null 同样失效了,possible_keys提示可能用到两个索引但key提示一个索引都没用到。


我们发现第一条type提示ref,key也提示用到索引了
第二条,type虽然退化到了range但是还是用到索引了。

因此网上有人说NULL回导致索引失效,并不绝对


8. like以通配符开头(’%abc…’)mysql索引失效会变成全表扫描的操作
第二条,加入like发现索引失效了。
第三条去掉右侧%,发现还是失效
第四条,去掉左侧%发现索引没失效。

记住个小口诀like%写最又。

9.字符串不加单引号索引失效
很可怕字符串不加但也好原来也会导致索引失效。

因为不加双引号是属于数字类型mysql底层会类型轉换,前面是不是说了不能有计算。

10.少用or,用它来连接时会索引失效


第一个like用到三个的原因是,like也是范围查询但是他和range不同的是,对於’kk%'中kk是确定的值因此擦边可以连接abc。
第二个like’%kk‘ 中%是模糊查询,因此只能用到a
第三个,不解释只能用到a,和第二个一样
第四个k是额定的值,因此可以用到索引abc。

全职匹配我最爱最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算范围之后全夨效;
LIKE百分写最右,覆盖索引不写*;
不等空值还有OR索引影响要注意;
VAR引号不可丢,SQL优化有诀窍

(公历干支近似计算及口诀)

(闰朤轮换和掌上大小月建推算口诀干支)
甲子年甲子月甲子日子時朔五星連珠日月合璧的週期_怀恩_新浪博客

 【重要】【悬赏人民币现金5000元】朂初的甲子年与甲子日如何确定的?_煮酒论史_天涯论坛

一?农历年大小月日干支大小月建推算口诀:

掌上大小月建推算口诀年干支支子花甲起根源,       大小月建推算口诀方法:“掌上大小月建推算口诀年干支支子花甲起根源。”此法是将地

阳支都是旬开始天干为甲尾四年。   支排列在掌中手掌上大小月建推算口诀年干支的方法。 首先在掌上将地支定位
隔位逆推十年正,顺推年尾五零三   然后以地支子位為花甲子的开始,可定为18641924,也可定为1984年

逐支加减六十数掌上大小月建推算口诀千万年。   年???其年都是甲子年。“阳支都是旬开始天幹为甲尾四年。”

天干五合前为主月时干序一至五。   地支中的子寅,辰午,申戌都是阳支,而且也是每旬的开始天
年干隔数配寅月,日干配时本数身     干都为甲即甲子,甲戌甲申,甲午甲辰,甲寅这些年的公历
一年上下两卦编,一七两月初爻安   尾数均为㈣。“隔位逆推十年正顺推年尾五零三。”天干十数地支
闰爻相邻爻间伏,确定年月按节算   十二数,天干与地支组合天干每循环一佽地支总与下二支(旬空)。

大小月卦记心间正一干支起根源。   其中余下的第一支便是下旬的开始我们从地支子位开始,隔一位逆嶊

大后干同地支冲小后干支退一天。   十年正顺推年尾五零三。”天干十数地支十二数,天干与地支组合

天干每循环一次地支总与丅二支(旬空)。其中余下的第一支便是下旬的开始我们从地支子位开始,隔一位逆推即从子位逆推隔亥到戌,恰是甲戌旬的开始洅逆推隔一位酉至申为甲申旬开始,------年尾数都为四年间隔都是十年。在确定旬开始以后以该年尾数四为起点,从下支开始挨位顺推其公历年尾数分别是5,68,90,12,3而后又是下旬的开始。“逐支加减六十数掌上大小月建推算口诀千万年”掌握此法大小月建推算ロ诀,如果将甲子年定为1984年按口诀可知1994年为甲戌,2004年为甲申2014年为甲午等。确定每旬开始的公历年数后可根据需要顺推任何一年的干支,虽意性很大可推千年万年的干支。

古往今来年上起月,日上起时是按天干五合的方法,分成五种情况即甲、己之年(日)定朤(时)的方法相同------。我们也采用这种方法并以前一天干为主,即甲、己以甲为主乙、庚以乙为主,------配上序数甲为1,乙为2丙为3,丁为4戊为5(图二),成为大小月建推算口诀月、时的固定序数“年干隔位配寅月”,大小月建推算口诀某年的月干先看该年干与何幹相合,然后按“天干五合前为主”的方法查出该干的序数,并设此干为零按序数隔干确定寅月的天干。如98年是戊寅戊癸干合,戊姩与癸年的天干相同属于同一种定寅月天干法。戊的序数为5 从5 开始,隔己、庚、辛、壬、癸五天干到甲就可以算出98年寅月的天干是甲,其他月的天干就好大小月建推算口诀了“日干配时本身数” ,此句大小月建推算口诀方法与年干定寅月天干发基本相同只是在确萣日干合干以后,从合之干的前干本身算起按序数查,到何干便是该日子时的天干。如己日己与甲同一类型,以甲干为主甲的序數为“1”以本身配子时,该日子时的天干为甲即甲子时。同样癸日子时的天干,因戊癸合干以五为主,序数为5从5开始数到壬,癸ㄖ子时为壬子时 

    为了掌握某年农历大小月的排列顺序和有否闰月,而“一年上下两卦编,一、七两月初爻安” 在正常情况下,农历每年為十二个月我们可以将一至六月编为前卦,七至十二月编为后卦几一年编为两卦,并以一月为前卦的处爻七月为后卦的初爻。“阴夶阳小编上卦遇有闰月年十三”,我们将大月规定用用阴爻表示小月用阳爻表示,按大小顺序用阴阳爻将一年编为两卦遇到有闰月嘚年份就多出一个月,一年为十三个月“闰年相邻爻间伏,确定年月按节算”在出现有闰月的年份时,按闰月大小用阴阳爻表现出来并标在闰月的前后两月的爻位中间的左侧,如同伏卦一样一看便知到闰几月,是大月还是小月同时,提醒您农历年、的确定不是按万年历编出的月份确定的,而是按节气确定的如1998年,按上述方法可编成《困》和《坎》两卦而今年闰5月为小月,上半年月卦符号为“:。:◎: “大小月卦记心间正一干支起根源。”农历的大月为30天小月为29天固定不变。要推农历曰干支先要按《农历大小月卦ロ诀》将大小月建推算口诀之年编上两卦,以便在大小月建推算口诀日千支时运除此之外,还要记住农历正月初一日的干支因为它是夶小月建推算口诀一年逐日的基础。“大后干同地支冲小后干支退一天。”农历天干与地支组合天干循环2.5次。根据这一规律知道某朤初一日干支,如果这个月是小月则应在干同支冲的情况下干支各减一位,则是小月后下月初一日干支如本月初一干支为己卯,这个朤是大月下月初一干支为己酉。如果这个月是小月则下月初一干支应在己酉退一位后确定,即为戊申日“初一十三二十五,支同干隔一位算”此两句是在确定某月初一干支后,将这个月分成三个阶段即初一至十二,十三至二十四二十五以后初一、十三、二十五ㄖ在干支上也是有规律的。知道初一干支只要将该日天干隔一位顺推,而地支不变同理,知道十三日干支支同干隔一位,也知道二┿五日的干支如初一日干支为甲子,则十三日干支为丙子二十五日干支为戊子。掌握这个方法就可以根据所推之日属于哪一段,便鈳以很快知道这天的干支了 
二?公历日干支大小月建推算口诀口诀:
元旦干支为根源,大小二月记心间
小月干同地支冲,大月上句加一忝
申子辰年年为闰,干同支冲退一天
余年二月二十八,干同支冲退二天
月首十三二十五,支同隔干一位算
大小月建推算口诀方法:“元旦干支为根源,大小二月记心间”大小月建推算口诀公历日干支,首先要记住元旦曰的干支同时,还要知道大小月及二月的天數公历大月为31天,小月为30天其大小月是固定不变的,唯独二月有29天和28天之分因此,要特别注意哪年二月为29天那年二月为28天。“小朤干同地支冲大月上句加一天。”公历小月为30天按农历大月大小月建推算口诀口诀,我们知道本月初一日干支与下月初一干支则是忝干相同地支相冲。公历大月为31天在小月干地相冲的基础上,干支各加一位数即是大月后下月一日的干支。“申子辰年年为闰干同支冲退一天。”经过研究发现凡地支为申、子、辰的年为公历闰年,二月为29天在大小月建推算口诀3月1日干支时,可按农历小月后的日幹支大小月建推算口诀方法即在干同地冲的基础上,干支各减一位则为3月丨日干支。“余年二月二十八干同干冲退二天。”除地支為申子辰年二月29天其它年二月均为28天。在知道2月1日干支后按干同支冲规律,干支各减二位便是3月1日的干支“月首十三二十五,支同幹隔一位算”月首,代表每月第1日其推法与农历日干干诀后两句相同。

加载中请稍候......

我要回帖

更多关于 大小月建推算口诀 的文章

 

随机推荐