00:00
我们后续相关的学习,下面我们来走到我们的第二章索引优化,OK,那么呢,往下走,同学们呢,请看我们索引优化来。首先性能下降,C慢了,假设我们现在缩小我们的范围,大家都知道各位同学如果说是收到慢的时候,第一步是不是先要连下Linux生产服务器先打top呀,嗯嗯,能理解吗?因为人家会问你说啊,请说一下你说你做过GVM调优,你做过生产故障的排查,一般有哪些招,尤其假设当然现在我们呢,主要呢,因为在那些排查命令,张程老师和我之前的面试题的分享的话是给大家说过一些,那么现在我们主要是不是针对于SQL啊,好同学们,你你们认为哈,是不是这条SQ1抓出来,你马上就优化呀。是吗?有可能真实的生产环境,这种故障第一个要复现,有可能你去排查的时候他就跑了,没法腹泻,第二个干嘛呢?有可能至少需要他跑个半天到一天,甚至三天左右,是不是尽量的筛查和缩减这个范围啊,不是说故障员工,呃,故障的运维工程师一报故障,你下一秒就能获得这条CQL,而且到底是不是真的情况,到底是不是我们Java程序员SQL写的慢导致的,那比如说是磁盘空间满了,那么请问一下这些情况是不是也会导致慢啊,那么所以说我们呢,缩减范围,假设真的是我们今天所针对的问题是CQ导致的,我们也定位了,那么呢,一直线时间长,二等待时间长,那么呢,主要问题是这样,第一种不用说。
01:55
你select语句写答案。各种连接,各种子查询,导致用不上索引或者没见索引,跑的贼慢无比,那么这个时候不用讲,咱们是不是得看看索引后续优化的内容啊,第二个。
02:15
怎么着索引失效?注意,索引失效的前提是你见了没用上,而没有索引是什么呢?你是不是根本就没见过呀?那么呢,举一个不恰当的例子哈,我们呢,来看一下,索引呢,分为呢,单指索引和复合索引。那么呢,首先我们来看一下这种问题哈。这是什么意思呢?假如说同学们,你们呢,有一张表,有ID,有name,有email,有微信number,好,这个时候假如说select from user表,Well,大家呢,特别喜欢用内幕来做查询,假设这个表呢,上千万的记录,而且呢,假设他们的名字呢,重名的也很少,那么各位亲,你做了以后,我要想按照。
03:16
这个内幕查的快,我是不是要在上面做一个索引啊,就是检索了以后就像是有一个迅速定位到它的这么一种感觉,那么这个时候呢,我们先来回答一下,一、为什么要这么做?二、什么叫单值索引?什么叫符合索引?首先假设我们统计了用户的习惯,特别喜欢按照什么名字来做,那么这个时候我们是不是create index呀?Create table是不是固定写法?Table是键表,Create index是不是叫键索引啊?放心,这个命令后头会恐怕执行上百次,你第一次听,由于前面的初级阶段同学们五个月前学的只是create table,第一次见,稍微有点不习惯,不着急,慢慢来,你跟下来,看着看着就熟悉了,听懂好,它的模式基本上是什么呢?IDX下划线。
04:10
某张表我现在建,注意什么叫单值索引呢?就是说我来查的时候,只给这张表的某一个字段建一个索引,听到那就也就是说只用了该表的某一个字段键索引,那么。这个就是我的索引名,相当于说不亚于create table student,只不过student是不是叫表明,而这个是不是叫索引名啊?那么业内的一些潜规则或者是通用的做法是不是IDX下划线开头的代表你就是键的索引,那么呢,什么意思呢?在哪张表user表的什么name字段上是不是干了个索引啊,然后呢,后面呢?啊,在哪啊,User这张表上面的哪个字段是不是name字段啊,那么这样的一见了索引以后,相当于说我们以后要是按照这个name幕来查的话,是不是随着数据量增大,比不见所引的时候干嘛快很多呀?为什么会快?因为你没见过它是杂乱无序无章的,而见过以后他会给你做了排序,排序了以后是不是查的快一些啊,就有点类似于什么呢?你们照一个合影,大家都有这种感觉。
05:22
个子高的是不是往中间挤,个子相对低的是不是往两边分呢?那么这个时候也就是说什么他呢,为了像查的快,为了我们照相的效果好一点,是不是个子矮的往两边分,个子高的往中间挤啊?那么也就是说没见索影之前大家是胡乱站,你跟我讲高高低低,起起伏伏,这个照片效果好不好,不OK吧,谁哪个班照毕业照也不会说不排随便乱照吧,但是像这样以后我们排序过,我们重新调整过,这样从照片的效果而言,是不是会比不照没有排序之前要更好,那么所以说这样的索引和没见索引,其区别就是在于什么,他在底层做了,给你们先做了一个排序,当然我们待会儿会着重讲到底这些索引是怎么折腾的,我们现在只需要明白什么是单值索引,怎么建索引以及什么是符合索引。好,那么什么又是符合索引呢?
06:17
好,那么换句话说,既然有单值,有没有多值啊,好,什么意思呢?假设我内N的email可不可以啊同学们,那么言下之意就是可能我统计出来本次操作这哥们特别喜欢用这三五个字段中的是吗?前三个或者中间这两个去做,那么也就是说频繁使用的这个字段,我们是不是给他建议索引,让他查的更快啊,那么这个时候假设那么这个命令我们把它呢搂出来,User表,Name email,那么这个时候各位亲,这样的话,是不是我们的查询条件选的越来越多,但是我们在经常使用最频繁使用到的查询条件的话,咱们是不是像这样建一个索引,它查的会特别快啊,那么类似的case呢?当然哈,我们的这个页面熟不熟悉啊,当然我们。
07:18
是拿这个举个例子啊,京东的首页详情页上一条记录的点击,这个呢比我们呢想的要复杂很多,但是呢,我们这儿就是举个例子呢,就是说我这是不是举的user这张表啊,然后查名字和name,但是京东这边大家都知道,如果说你来查一个东西跟我讲,你是不是会选很多条件,嗯,这些条件弟兄们都选过吧,那么你选这些条件以后,是不是相当于在while后面加a and b and c and d啊,那么好,这个时候请问这些索引我们要是把它建上去了以后。当然我再次强调京东的是不是不是这么简单,要比我们说的要远复杂呀,我们只是用这个界面来说了,以后就是说把你经常用的字段见了索引以后,查的是不是快一些,那么好,请问那到底哪些字段建索引呢?
08:08
大家想京东商城刚上线的时候,他会不会说,诶,我猜顾客一定会是用这几个字段做查询比较多,可能吗?他只会是什么?一开始第一版有个初稿,比如说想都不用想,一般而言买笔记本的是不是男性用户居多,女性更多的是不是先从颜色去查,男的是不是关心这个呀?换句话说,你第一个查你们同学们,你们买电脑的时候是不是先按品牌去查好,那么这个时候请问我先按个品牌去查以后,比如说有那么多品牌是联想的,华硕的,明基的,神州的,微星的等等,一个品牌落下以后,是不是隔离了很多品牌啊,那么这样的话就说什么,你见完这些索引以后,就相当于说我们这是不是查的就非常快啊,好,那么呢往下走。
09:03
大家请看。慢是这两个导致第四种情况干嘛呢?查询关联有太多的作瘾,但是呢,这种有划分两说,你们会看到,你们如果说我们传统企业的SQL,大家呢,抬头你们一定学过,是不是多表的关联子查询,嵌套查询这一堆啊,最怕的是不是就是七八张表关联到一块,然后各种一跟二是左连接,然后呢,二和三或者五和六又是外连接七八张表,最终如果做统计分析的时候,是不是很多张表哪大段大段的一段大色票得出到一个综合的结论啊好,这是传统企业,那么这个时候呢,注意蚯引多好不好啊好不好,就像一个Java的类一样,你的继承层次太多是不是也不好啊,但是呢,有些时候呢,请注意有些时候是一些系统上的一些什么。
10:06
老旧长廊系统的什么设计缺陷,或是有些不得已的需求,以及各位同学目前做分布式的开发,可能库和表都已经分离了,那么这个最好的时候是不是circleql就引越少越好啊?那么呢,我们呢要明白关联查询太多的就隐查询起来也会慢,也就是什么会导致执行时间长,等待时间长。第四种情况干嘛呢?服务器调优及各个参数的设置,如果这些设置的不合理,比例不恰当,是不是也会导致这个性能下降,CQ变慢啊,所以说长当然。包含但不限于这四个,还会有其他的,但是呢,主要而言的话呢,尤其是前两个跟我们Java工程师相关,前三个我们是不是也要写就业查询啊,那么呢,着重的如何写好CQ,如何建好索引,且导致自己索引不失效,那么就是我们第二章要着重点解决和学习的任务。
我来说两句