几种MySQL数据库的优化方案


最近在找工作,面试时很多企业会问到关于数据库优化的问题,今天在这里总结一下数据库优化问题,以MySQL数据库为例进行讲解。
为什么要优化:
随着实际项目的启动,数据库经过一段时间的运行,最初的数据库设置,会与实际数据库运行性能会有一些差异,这时我们 就需要做一个优化调整。

数据库优化这个课题较大,可分为四大类:
》主机性能
》内存使用性能
》网络传输性能
》SQL语句执行性能【软件工程师】


下面列出一些数据库SQL优化方案:
(01)选择最有效率的表名顺序(笔试常考)
数据库的解析器按照从右到左的顺序处理FROM子句中的表名,
FROM子句中写在最后的表将被最先处理,
在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表放在最后,
如果有3个以上的表连接查询,那就需要选择那个被其他表所引用的表放在最后。
例如:查询员工的编号,姓名,工资,工资等级,部门名
select emp.empno,emp.ename,emp.sal,salgrade.grade,dept.dname
from salgrade,dept,emp
where (emp.deptno = dept.deptno) and (emp.sal between salgrade.losal and salgrade.hisal)
1)如果三个表是完全无关系的话,将记录和列名最少的表,写在最后,然后依次类推
2)如果三个表是有关系的话,将引用最多的表,放在最后,然后依次类推
(02)WHERE子句中的连接顺序(笔试常考)
数据库采用自右而左的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之左,
那些可以过滤掉最大数量记录的条件必须写在WHERE子句的之右。
例如:查询员工的编号,姓名,工资,部门名
select emp.empno,emp.ename,emp.sal,dept.dname
from emp,dept
where (emp.deptno = dept.deptno) and (emp.sal > 1500)
(03)SELECT子句中避免使用*号
数据库在解析的过程中,会将*依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间
select empno,ename from emp;
(04)删除表中的所有记录,用TRUNCATE替代DELETE

(05)尽量多使用COMMIT
因为COMMIT会释放回滚点
(06)用WHERE子句替换HAVING子句
WHERE先执行,HAVING后执行
(07)多使用内部函数提高SQL效率

(08)使用表的别名
salgrade s
(09)使用列的别名
ename e

  • 鍒嗕韩9涓畝鍗曞ソ鐢ㄧ殑MySQL鏁版嵁搴撲紭鍖鏂瑰紡
    绛旓細3. 鐢↗OIN鏇挎崲瀛愭煡璇粠MySQL 4.1璧凤紝JOIN鍙栦唬瀛愭煡璇紝鍑忓皯浜嗗唴瀛樹腑涓存椂琛ㄧ殑浣跨敤銆傛瘮濡傦紝鏌ユ壘鏃犺鍗曞鎴锋椂锛屼娇鐢↗OIN姣斿瓙鏌ヨ鏇村揩锛岀壒鍒槸褰揓OIN瀛楁鏈夌储寮曟椂銆4. 鍒╃敤JOIN鐨勬ц兘浼樺娍JOIN鏌ヨ鏁堢巼楂橈紝鍥犱负MySQL鍙互鐩存帴澶勭悊JOIN閫昏緫锛岃屾棤闇涓存椂琛ㄣ傜‘淇滼OIN瀛楁鏈夌储寮曚笖绫诲瀷鍖归厤锛屼互浼樺寲鎬ц兘銆侸OIN绫诲瀷璇...
  • 鍑犵MySQL鏁版嵁搴撶殑浼樺寲鏂规
    绛旓細鏁版嵁搴撲紭鍖栬繖涓棰樿緝澶э紝鍙垎涓哄洓澶х被锛 銆嬩富鏈烘ц兘 銆嬪唴瀛樹娇鐢ㄦц兘 銆嬬綉缁滀紶杈撴ц兘 銆婼QL璇彞鎵ц鎬ц兘銆愯蒋浠跺伐绋嬪笀銆 涓嬮潰鍒楀嚭涓浜涙暟鎹簱SQL浼樺寲鏂规锛氾紙01锛夐夋嫨鏈鏈夋晥鐜囩殑琛ㄥ悕椤哄簭锛堢瑪璇曞父鑰冿級 鏁版嵁搴撶殑瑙f瀽鍣ㄦ寜鐓т粠鍙冲埌宸︾殑椤哄簭澶勭悊FROM瀛愬彞涓殑琛ㄥ悕锛 FROM瀛愬彞涓啓鍦ㄦ渶鍚庣殑琛ㄥ皢琚渶鍏堝鐞嗭紝 ...
  • mysql璋冧紭鐨鍑犵鏂瑰紡
    绛旓細1. 浣跨敤绱㈠紩锛氱储寮曟槸MySQL涓竴绉嶄紭鍖栨煡璇㈤熷害鐨勬妧鏈銆傚湪澶勭悊澶ч噺鏁版嵁鏃讹紝绱㈠紩鍙互鏄捐憲鎻愰珮鏌ヨ閫熷害銆傝浣跨敤绱㈠紩锛岄渶瑕佸湪鏁版嵁搴撹〃涓坊鍔犵储寮曪紝浠ヤ究蹇熸煡鎵炬暟鎹2. 浼樺寲鏌ヨ锛氭煡璇㈡槸鏁版嵁搴撲腑鏈甯哥敤鐨勬搷浣滀箣涓锛屽洜姝ら渶瑕佸鏌ヨ杩涜浼樺寲锛屼互鎻愰珮鏌ヨ閫熷害銆傚彲浠ラ氳繃閬垮厤浣跨敤閫氶厤绗︺佷紭鍖栨煡璇㈣鍙ュ拰鍑忓皯JOIN鎿嶄綔绛...
  • 濡備綍浼樺寲Mysql鏁版嵁搴
    绛旓細4銆佸鍚堢储寮 姣斿鏈変竴鏉¤鍙ユ槸杩欐牱鐨勶細select * from users where area=鈥榖eijing鈥 and age=22;濡傛灉鎴戜滑鏄湪area鍜宎ge涓婂垎鍒垱寤哄崟涓储寮曠殑璇濓紝鐢变簬mysql鏌ヨ姣忔鍙兘浣跨敤涓涓储寮曪紝鎵浠ヨ櫧鐒惰繖鏍峰凡缁忕浉瀵逛笉鍋氱储寮曟椂鍏ㄨ〃鎵弿鎻愰珮浜嗗緢澶氭晥鐜囷紝浣嗘槸濡傛灉鍦╝rea銆乤ge涓ゅ垪涓婂垱寤哄鍚堢储寮曠殑璇濆皢甯︽潵鏇撮珮鐨勬晥鐜囥
  • Mysql鏁版嵁搴撲紭鍖鍙互浠庡摢鍑犱釜鏂归潰浼樺寲
    绛旓細1銆侀夊彇鏈閫傜敤鐨勫瓧娈靛睘鎬 MySQL鍙互寰堝ソ鐨勬敮鎸佸ぇ鏁版嵁閲忕殑瀛樺彇锛屼絾鏄竴鑸鏉ワ紝鏁版嵁搴撲腑鐨勮〃瓒婂皬锛屽湪瀹冧笂闈㈡墽琛岀殑鏌ヨ涔熷氨浼氳秺蹇傚洜姝わ紝鍦ㄥ垱寤鸿〃鐨勬椂鍊欙紝涓轰簡鑾峰緱鏇村ソ鐨勬ц兘锛屾垜浠彲浠ュ皢琛ㄤ腑瀛楁鐨勫搴﹁寰楀敖鍙兘灏忋2銆佷娇鐢ㄨ繛鎺ワ紙JOIN锛夋潵浠f浛瀛愭煡璇(Sub-Queries)MySQL浠4.1寮濮嬫敮鎸丼QL鐨勫瓙鏌ヨ銆傝繖涓...
  • mysql鏁版嵁搴撲紭鍖栫殑鍑犵鏂规硶
    绛旓細SELECT * FROM books WHERE name like"MySQL%"浣嗘槸濡傛灉鎹㈢敤涓嬮潰鐨勬煡璇紝杩斿洖鐨勭粨鏋滀竴鏍凤紝浣嗛熷害灏辫蹇笂寰堝锛歋ELECT * FROM books WHERE name锛="MySQL"and name锛"MySQM"鏈鍚庯紝搴旇娉ㄦ剰閬垮厤鍦ㄦ煡璇腑璁㎝ySQL杩涜鑷姩绫诲瀷杞崲锛屽洜涓鸿浆鎹㈣繃绋嬩篃浼氫娇绱㈠紩鍙樺緱涓嶈捣浣滅敤銆mysql鏁版嵁搴撲紭鍖栫殑鍑犵鏂规硶鏍囩锛歳od...
  • 鎬庝箞杩涜mysql鏁版嵁搴撲紭鍖(mysql鏁版嵁搴撲紭鍖栫殑鍑犵鏂规硶)
    绛旓細涓昏浠庝互涓嬭搴︽濊浼樺寲鏂瑰悜锛1锛孧ysql閰嶇疆浼樺寲涓昏瀵规煡璇㈢紦瀛橈紝mysql鏁版嵁搴杩炴帴鏃堕暱锛屽紑鍚參鏌ヨ鏃ュ織(寮鍚悗杩樿鍒嗘瀽sql)绛夋柟闈㈣繘琛屼紭鍖2 Myslq璇彞浼樺寲3 Mysql绱㈠紩浼樺寲涓昏鏄渶瑕佹敞鎰忕储寮曟暟閲忓拰绱㈠紩澶辨晥鎯呭喌锛岄噸澶嶇储寮4 Mysql寮曟搸浼樺寲innodb寮曟搸娉ㄩ噸浜庝簨鍔★紝鑳戒繚璇佹暟鎹竴鑷存yisam寮曟搸鍙互杩涜鍏ㄦ枃妫绱紝浣嗕笉...
  • mysql鏁版嵁搴撶殑浼樺寲鏂规硶?
    绛旓細绱㈠紩鐨勭被鍨 mysql鏁版嵁涓湁澶氱绱㈠紩绫诲瀷锛宲rimarykey锛寀nique锛宯ormal锛屼絾搴曞眰瀛樺偍鐨勬暟鎹粨鏋勯兘鏄疊TREE;鏈変簺瀛樺偍寮曟搸杩樻彁渚沨ash绱㈠紩锛屽叏鏂囩储寮曘侭TREE鏄父瑙鐨勪紭鍖瑕侀潰瀵圭殑绱㈠紩缁撴瀯锛岄兘鏄熀浜嶣TREE鐨勮璁恒侭-TREE 鏌ヨ鏁版嵁绠鍗曟毚鍔涚殑鏂瑰紡鏄亶鍘嗘墍鏈夎褰;濡傛灉鏁版嵁涓嶉噸澶嶏紝灏卞彲浠ラ氳繃缁勭粐鎴愪竴棰楁帓搴忎簩鍙夋爲锛岄氳繃浜...
  • 濡備綍浼樺寲mysql鏁版嵁搴
    绛旓細浜屻浼樺寲纭欢 濡傛灉浣犻渶瑕佸簽澶х殑鏁版嵁搴琛(2G)锛屼綘搴旇鑰冭檻浣跨敤64浣嶇殑纭欢缁撴瀯锛屽儚Alpha銆丼parc鎴栧嵆灏嗘帹鍑虹殑IA64銆傚洜涓MySQL鍐呴儴浣跨敤澶ч噺64浣嶇殑鏁存暟锛64浣嶇殑CPU灏嗘彁渚涙洿濂界殑鎬ц兘銆傚澶ф暟鎹簱锛屼紭鍖栫殑娆″簭涓鑸槸RAM銆佸揩閫熺‖鐩樸丆PU鑳藉姏銆傛洿澶氱殑鍐呭瓨閫氳繃灏嗘渶甯哥敤鐨勯敭鐮侀〉闈㈠瓨鏀惧湪鍐呭瓨涓彲浠ュ姞閫熼敭鐮佺殑鏇存柊銆...
  • 瓒呰缁MySQL鏁版嵁搴撲紭鍖
    绛旓細2.2.2 浼樺寲鏁版嵁搴鍙傛暟 浼樺寲鏁版嵁搴撳弬鏁板彲浠ユ彁楂樿祫婧愬埄鐢ㄧ巼,浠庤屾彁楂MySQL鏈嶅姟鍣ㄦц兘.MySQL鏈嶅姟鐨勯厤缃弬鏁伴兘鍦╩y.cnf鎴杕y.ini,涓嬮潰鍒楀嚭鎬ц兘褰卞搷杈冨ぇ鐨勫嚑涓弬鏁.2.2.3 鍒嗗簱鍒嗚〃 鍥犱负鏁版嵁搴撳帇鍔涜繃澶э紝棣栧厛涓涓棶棰樺氨鏄珮宄版湡绯荤粺鎬ц兘鍙兘浼氶檷浣庯紝鍥犱负鏁版嵁搴撹礋杞借繃楂樺鎬ц兘浼氭湁褰卞搷銆傚彟澶栦竴涓紝鍘嬪姏杩囧ぇ...
  • 扩展阅读:mysql的优化有哪几种 ... mysql的优化有哪些 ... mysql调优的几种方式 ... mysql优化的几种方法 ... mysql优化面试题及答案 ... sql查询优化的几种方法 ... mysql查询慢的优化方案 ... 常见的mysql优化策略 ... mysql数据库索引有哪几种 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网