暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

这其实都算不上优化

原创 薛晓刚 2022-12-08
231

    很多场景下,我觉得加索引这个其实都不能算是优化。
    多年前听到一个故事说一个DBA去了银行,回来被一个银行里面称之为大神。DBA的同事们说来给我们讲讲你怎么优化的?该DBA说,实在说不出口啊。我仅仅是加了一个索引而已。而已,而已,而已。
    我们在工作中有两类最常见:一类是没建立索引,比如我刚才说的。这种连开发都知道应该建立索引。一个几亿的表,一查就慢,开发自己也知道不建立索引说不过去了。都会主动的加对应的索引。
    今天我还遇到一个问题,开发过来说建立个索引吧。我说你看看这个逻辑呢?开发看后直摇头,这种没有用。

     那么就是我们说的第二类。就是索引在那里,但是select的时候没用他。比如select * from t where a!='完成'。因为完成和未完成都不少。一般来说索引也建立在不去经常修改的列上。少初级开发会写出上述的SQL,因为他理解是查找未完成的就是查找全部未完成的。语法上没错就行。至于是不是看看3年前未完成的要不要处理?他不管。如果问他要不要每次都看看一年前的未处理?智商正常的通常会想想说,应该不用,那么就未处理的不用每次都去看。但是我们也不能排除这个世上就有一根筋的,他们会说要的,就是从最开始的那条做起。(这种是背着牛头不认账的,可能心里知道错了,但是嘴上一定死扛)遇到后者这种,我的建议是不要继续说下去了。不在一个世界中。

    今天这个处理未完成的场景,我建议加个时间,每次检查看看一个月内有没有未完成。其实这种每5分钟的定时任务,每次看当天有没有就足够了。这样改了以后性能大概提升了20倍左右。不过这种太过基础,我依然觉得这种都不能算是优化。感觉是我大学刚毕业时候处理的一样。到2022年了,这种问题其实在全国依然很普遍。

    昨天晚上在TiDB的版主会上,大家群情激奋的讨论优化器,都很专业。只是看到SQL时候,我觉得我都心疼优化器,这写的实在是不讲道理。论优化器而言大家公认Oracle做的最好,那么没有Oracle那么强大优化器的数据库我们就要好好的去写一些质量高的SQL才行。SQL的质量就是决定了系统的质量。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论