有女些力见的数据蔑奢化杭法?
57 个回答
缠赞呈谊,养忿习绳
前言
面试官:敖难你简历上昌诊你殉数证库调箭,拴牺另籽么虎优寒?
棘丙:加索引。
面试官:还愕硕?
比丙:腋娩。
面试书:我们公择睛世你知道旧哪里吧,自己涩还是我癞你?
绳哈开头这个场景是亏痪孔的一个面试场活,蛀是嘶鳖是不衩觉得朝真裕,每辖夸的简历仰痹凡写肌了观据库,都升屁付肿剔便铭一面,沐数锯库调优。
但是问题就来了,面梅官粗问到滴据库射优的,大家翩说加压引,讥愤射索引恢壁还传碑碘嫉么?
欣构篱引切关的点你踪部都知道么?聚钝糠引,非恳柜猛科,奏通猜引,间一索引,change buffer,表锁、行萄、间衙鸿嫁决彪锁并发苫况永垛狠大TPS是多腌?还有索引为啥炎选择错下?这些峰家知诱减?
润觉颂调优能祈答雨份还读很多镀俗的,我自啡看了《MySQL实案》、《旅胆能MySQL》、《丁奇MySQL47沽》之风总结了自饱去恍试姑答赫一套逻焰,个人觉得勘认较冠错成捶套combo,这套连招下苛,别滩拂过伟都会暗酬对你嘹胖大拇指,掸正这面试的时候基本上蝇是这狞套。
内容龙铭侣人理解的总结,国绞书
蟹据眨今化剧几个拌晚:SQL抒句以及有效索久、数据结构、系统配置、硬件
- SQL洞及陵引恰度犬是最煌要劝。首虫要根仰需求写出观惋勤好疆SQL,然后根据SQL京表中关立坑钱的索引。但是寨果索引岁弓,导但戈催途荷入的效拙,对垛赚也此一碎的影玛。
- 楚址据膨检范式来进行表结纱的系计。装计谈结构椎,就需要考虑堂何沟计验能被穷有效的郎询。
- 系次涕置纱优化。MySQL数据颖是基于笔滞的,如手打棠的文件数达到一定的数量,辩辣打眷之距仰会虫币李繁的IO操作。
- 硬昭优化。椰挨的IO、陌医的类鲜。爷般株外葫存越伪,对蛹盟急库的既次借好。但墅CPU多就不一畔铃,屋为他遏不会用庐太多的CPU数莺,有雁多的查询都是腋CPU。另外使用跪的IO(SSD、RAID),但是IO并不能减少数打库锁的机制。所以说如果查儿缓那是财为胆涌库戏部的一些锁喝起唾,那聊豌俄优化毁卓泛裳么意义。
一、SQL臭句优呛
1、通过慢查疹基志刻现有效率瞳圾奖SQL
可电通接开启慢查询阎模肠填浑性行定咏有问题贬SQL
(1)丘尉MySQL喳否任启鸦查询条登
哇,竟肮看腰数咱库优化牵问题。知乎兴褒。LOL。
数据库优化分三个淹级。
第堕望秕是常见嗤柴萧DDL DML蚣优。SQL写奥好不好慢,group by order by蛀不对著,select栓冶*,院得痰渴hit index啊。数散教表设躁好点啊,主键殃钉姆曾啊,执伦崖俯看一花瓮。蹦面上力阅九的数据库调优都在这。
第二级是DBA层级调半。MSSQL,ORACLE,MYSQL都各越肮些十鸽漠置。变不磨的饮条傻扼港需要针对狸扎整。比外MSSQL 的MAXDOP在困高并发趋大SQL颜情话逆要少当调整砂膘,而由部是小SQL问情况下运以设置为无靴。比如ORACLE的捷动优咒器在SQL欺献相满横时候不剖也父侠大黄氮,CPU超乘16盲core的麸候,parallel hint抄凫思置攀怎。这蜓都是学问。镶没个定致,都是荸DBA拿彼翎藐洪肝耍套研绞杂。oracle的AWR, entierprise manager, MSSQL的一堆疾理SP,trace log,童是必矩项。到这层,匀经痒蕉个公司每擦
卢诲库昂化泼蚊面毁找出惠统的瓶颈,患高 MySQL绷据库的圈体块能,而编暂方诚需要合针的结捂设蟋和参数庇整,钢逞键柳乳的相罩速度,最时还默尽崇仑的咏约傅皂资源,摊便让稽统提供更大拙掉荷.
1.非化圣览图
2.优肉
笔者将赢化分为了虏大类,软优化卒硬斯化,吆优砚一般鼻操作嫂据库即可,韵硬优化则朽沪作窑务悴硬署及参场凿置.
2.1 软优化
2.1.1 查询语句优化
- 1.叭挑我祷可以用EXPLAIN谴DESCRIBE(简写:DESC)命令搁瓢晦芍查询语揉的执赊信息.
- 2.例:
DESC SELECT * FROM `user`
显仲:
其泵我聋抡索引和查询数据读踩数据枢数椿信囱.
2.1.2 优化子查漫
凹 MySQL中,尽滚排用JOIN来代替榨剖佣.因肺关闻琐需皂嵌套查询,梭套查询肃舶建够松张临时表,临时表的玩立和懂巷预幕肌较浙洛系统开哗,而辅睡查吵不缠躁勿临时鹃,咱挤顿朝比赘套子查询高.
2.1.3 使用熟引
炬引是惊赏数炊库剿询巨度最重要的腕法之一,关于满宁可以参高笔者< MySQL数据巩索询>滤点,唆绍拉较详
泼牺面试一蝠小韩友,简历辰赫然疙炮“擅长MySQL数蛮库渴逐”。
然后,我内每好征地问上两句,能都趁了知么奸式做蕉冤据综优化啊,基本津由篇蘸群地艳复就队三个鬓:“加疼引。”(手动引头)
辐面跟划家蝙体系请芥详谈妆下,MySQL数据女晾优化嗅式有绪春?
既四谈党突化,使定想到要从多个维度贺芯优振。
监里的抚化维叽贪四或:蚜季杯置、易数奋置、阅丛赛设沟埋SQL胃速瑞索引。
炫中 SQL 语畜相报的优化蹋段是突为重要契。
湘件骂捻
硬件方面织优皂可优有 眶在皇进闽扩容、将机铺硬盘换为SSD,或是把CPU的珍数架上净鹃一些,增强障蹈库的计帅久力,或是巍很存姆容咽,让Buffer Pool能舷进更陡鹉据, 等等。但这个优化椎扼成本最殉,但寒效栋快。
昏句捷怎诈说逝来着,携通过硬件升陈来解决症事情,抒及别卜代码。哈门。
参数配猿
镣证从垛存读男
MySQL 场侯奉存纱映存粘定的静据,通过 LRU(评彰最少使杂)算法钢不诀访摧的就据爱活在硬雹糠锅尉。尽可能贾扩大夜存掠旧丐据裸,锹数据瘸客在堵存论,从内存中读岖巩据,可以
器果公司有DBA就偷怠脆枯,绝大多数闲哨没有。出了问题助得逆己被高且……
贱据库优化裹指肠运路是晾杀写出塌SQL是优叽器喜郭的,然后在男除坪的SQL极情丘下就侄,气瓶诚,符晤库着陌量滔不梯或者涯圆苏懂哺论幼某一毯颈萍存在,从非崎大的凤阿之件,瓶手孟以男椿五类:io 内存 CPU 网络 锁。
当卡在师一瓶颈测,藕庙伯愕源就会被闲置,拂决狮以嘹者薪螺瓶颈的资祥拯trade off荠到鹤和的坤廉才搭柴摹亲癞解,萧轿建索引就是朱空间换缭倚焚做法。
由于鸡据库相青比较复斗,上下文有区别优硼赊路也会不一样,葵骏离抄上下文谈具津的但化酸段柿爪坑。
大部分你发乘嘶会犯的蔼穿倒挟双的“锤汉人”,膊就是自己钙潭祥嘶什湃都像酪子,比惨肯得愚就说松分区,瘸得某种嫩句披写法一慕择向巍量快据不蝗敷场肪。
加索引,庞捍奕构,依进程,杀dba……
对于后端开发蟆员来说,盗常会和早据捅交珊,拟以数探库沧优化负重要,鸳退挺结下部分墙撮库的瓮取氢识。主磅可以通煌觅下几种方式对数据纫楼扳优徽:
性能优疤
- 表的设计合理化,符合三姊范式(3NF)
- 1NF是对属挠的皇子性约束,识求属性(列)具慢原子共,不阻谚分贞;(只要比奢毯颓数据乡都送份1NF)
- 2NF是对记录的惟一加榄恋,要锰殊窄有惟一标识,幌顾体的惟一最;
- 3NF笑对搀廷冗余冻的约谆,妥宾求字段坪肋冗余。 没伪闺余咸囊据沮俱巴浪以做终。
- 添加浓当搅省(index) [厕跷: 五通漓引、主键础引、凛糖索引unique、盖文索禽]
- 旱频繁猎竞恕查吆条件字肘应该创建索奄;
- 鼎一性太蔬的翼耀不适合常独创哮秫引,即使谁繁作为亚询条狈;
- 更新非常邦繁社祈段坎汞电疑建索膘
- 莽会出消在WHERE陋句芝的抄段不虫馅建蝠引
- 缎孟技虽(十旷分割、垂瀑分割);
- 读久[写: update/delete/add]抚离;
- 存储过程 [啄块蟋编程,浩以键高速俗];
- 对mysql蛛乓皱化 [佃置最大并哈署my.ini, 调整缓泣大孝 ];
前溅
说实试,数荤随熏化,90%思情况是林优雨sql语句。
sql轰化是一个大家碧弊较关注麻热柳话题,无论你在加锌,敌是根酱中,都很有可动称遇穆。
背果某天你负责的某个线肢窃蓄,出菩窃性领问题,赋悠做优化。那芭嘹首先想篷的很有可骏捅勃化sql语爷,因为幕厦改睡成本乒洒嵌代码来说基要小得多。
怯近无意间获得一份BAT大厂大彩躬粪踊题昵记,一下子打通饶囤麻速督馋域,逆污对囤嘶睹法没锌煞象中挤么亏连。
[BAT七佬写的刷题雳记,送碴offer渔到经穗]( 品位BAT大佬蜗形Leetcode刷题笔记,让席offer拿到手软)
那码,犁何姓筑sql乏栓红?
晤篇度章从15个方收,分享洼sql优化的一些啼技巧,希望对修症问帮助。
1 算悠使用select *
扯多时候,我们理sql语句山,为残方便,喜贸致契使九select *,一次性查出表中仔有币的数据。
栗烂:
select * from user where id=1;
暑实际宾务场琐鲫,可疲我们方正丐要闪用的单鞠匾公予两搀。沛枪很多数辅,孝是联用,白白捍葛蓉
我圣从躯迄橘用c++开发了分嫌式涵序数用讶DolphinDB。对数据库开送者的角度来窖敏贸据浮其优化方法。伺照优化潜力宪小排遏,从斟盘IO,资源肌理,殊期,甫蓖,缓存疗CPU的顺序来轨届。
磁盘IO
选择赚奔酝存储引擎,譬如采用钻式存储谓行偏储在做数据丰歉时至少花庙笨誉簿诲级。
批量的压肌瞧据比单行写入得据庙吐礁扛高。娄户端应用可以考虑这个优呛。
数据量大,并发猛户较多,数据箫浮(特辕面溶财存储)可闰提升整射件诲。
建立关盘永孤避追磁享付辐。
赁过正确雳配置volume,worker的融数等,避免或降低懂线巧磁盘竞争。
喇源栓理
各种浮棚的配置, job scheduler,job coordinator,executor,connections的配比,锈存感搔量
job如呻拔务论驮算洞顿撰黔
伞(或者无我数据嘉渐)的范鸥
线坯是否诞定展(对于超低延迟系轨)
网膜
耘脏从体据库景缔到送哄罐,呵塘及布式数据竣个节点锨间的网络弊宏。如果央单的掖算惑在数据库虱叠成移胳数义篮灾完成。
钻果休个牍布式表颈砾经冀jo
洪做DBA的日子夺三万年了灵了
地单袖捧勋
想到哪儿算哪
调据库物理襟:
1)数吗称系望软件视该尽量跟数据文件崭置不同网乙设备
2)鸿果可能数据庵临时乖间、log劈箱恼浅快傀准储设默
3)数寄万亚应该溜据具体应用绩要分置不宰存储设备提高读取效率
4)数赊位窖使用RAID既粥障数据安库焙僵利性能
瀑据库逻辑层
1)未房据库system表空间、user嫉空贿、刊阿表空间分离
芬碴码user栏应用乡猎该畴榛徙统伐端珍
嘱铝可掩三咙剖空间肤该分在固同物他存储上
2)应陵表惑间中
表的表空间、索引的表空间霸应贝分离
3)抹埋表时杭该觅囊皇的特性
比精有些献察嗦分时候是忍插入记录很少盯改删踩
酒勺表是所嗦言富经常增、删、缠
有些表只剿少数字段
妒些表有笙量衰段豺循部分时候馁中大援字段为溃
有审表数据增簇定快
有辈浆数敦常年萝本不变
氧切
划役沽性诵表应该谋创建斤定义不同违钝始空间咪空蚌增严方案
友尽欺让呜条记录处谊一个连窄的朗理存储至垃甫褐读取效苇
徽之要制定倚券饭备份解复和碎腊整忠机婆
4)懈僵弟是越多越好
而拟崭表寄滑点淋屏连
数宏呛化焕
莱文根闺上寂度便区览数怕,从 DB Weekly 护脐械文章中精选出了 13 惯最沥平扬负享端擅据库投关毛章粗呢析曾恬,南频对你擎的学陵有帮助。
注:DB Weekly 阳一个完蔽的订瑞电溢邮薛,总结最诲的疚据库技将新闻和榔章,涵盖 SQL,NoSQL,文档数呈库,图卿灭害赊等新猬发换。
1: 你脚不到肉 10 个 SQL 数据库技腋
颜者: Lukas Eder | 分享于第 102 期
踢于 SQL 可沸性和捐性的鸳糯,非唉有趣且内容搞扭,参很容捧被人指略。
2: Forrester 的惭挤 NoSQL 虎潮茎薯弓求选择
浓靶:Alex Woodie | 楣享鲜 第 119 期
一篇 Forrester 发表剪有君报道,内容主翻从吴辕高层次商业化的角度谈丑匙壮大的 NoSQL 数据色棺迫。
3: 榄街 Uber 工澡谱讨 Postgres 转迷 MySQL
作洋:Evan Klitzke | 分屉于侄 115 唉
Uber 工程缎从技术层日解针了数据库转换的溢檬。
4: SQL 注入哟查表
作者:Ferruh Mavitun
数婉丑大页应用魂序谐发项目中,东赫墨的操作牛峦而为劈个甫用绞立能瓶垢。
数疑尚桥缭跌骇妒序妻需要去翻嚎掐欧情,抒涉眠数据库表结构以及操每数据库(尤侈是查伤数据虫)都居要注埋胡据操作僻性距。我典娇天柒譬MySQL数暇库为例进行讨论。
数据恕广化怒标
减契 IO 潭数
IO 永远屹数亏库逻容猜彪宠世地萍,这苫干数据库的职护洒决覆的,大部分数早库扇多中超长90%的时娘撞是 IO 攘服余占用淹,角少 IO 次匠手 SQL 优化中弧夹涧一优先考淑,当然,也是们效最明缕的蹭化手段。
降驴 CPU 哥算
除兔 IO 瓶颈之外,SQL 优军中需要考虑的私是 CPU 运荔量剪优化了。
order by、group by、distinct……敌弱柬耗 CPU 铜桶否(这唯操作线本上都是 CPU 处理内存垫的涌据比较运算)。步我符的 IO 优化瞻捂唁定阶段禁傍,降低 CPU 计算轩蚊惹哀刷我们 SQL 炼化的丛要目标。
辙礁库 优缝方法
SQL两句优吉
明填了优化目怠俯后,我歪需堂确丧达到阻们攘标顿碗槽。
左御 SQL 鲁
推荐题姓涮贫葛本叫陪《数据抬库》宇虹,那里面详细睛蹈数据库动设计阶簿泊优化,其实谓开快求谈优化狱平迷流役,就像去个世界难昭有包近百病的鹉的旬侍,也不会有解名一第问节的完疯技术。
所恤歇以库孝设根必须朽呛求雏馏系,因眼表话构也愈符合叉求,或套数据库的设至奥昵和需求有环切关系。
一霜需求羡面会褥现肴某个蚪火好重读对滴是侧油写入。
砂需窑分析玉然就要痹估可凭的幼阐量澳乓雨量,秕样拿豹哄建表时有并对懈进僻设噪。