性能調(diào)優(yōu)攻略|SQL語(yǔ)句優(yōu)化
《性能調(diào)優(yōu)攻略|SQL語(yǔ)句優(yōu)化》要點(diǎn):
本文介紹了性能調(diào)優(yōu)攻略|SQL語(yǔ)句優(yōu)化,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
1/ 前言
關(guān)于 MySQL 優(yōu)化的方式在《千萬(wàn)級(jí)的大表!MySQL這樣優(yōu)化更好》文章已經(jīng)有提到過(guò).本日我們是談?wù)勱P(guān)于 SQL 語(yǔ)句的優(yōu)化部分.
日常 SQL 性能優(yōu)化過(guò)程中,會(huì)借助一些查詢(xún)分析工具來(lái)協(xié)助,例如:
Solarwinds的SQL Query Analyzer;
MySQL 的SQL Query Analyzer;
Oracle 的SQL Performance Analyzer;
微軟的SQL Query Analyzer;
此中 MySQL 我們還可以使用 explain 工具來(lái)查看 SQL 語(yǔ)句的執(zhí)行計(jì)劃(Execution Plan).
2/ 性能優(yōu)化
對(duì)付 SQL 的性能優(yōu)化,主要通過(guò)以下幾個(gè)維度來(lái)討論:
2.1/ 全表檢索
例1:SELECT * FROM user WHERE name = "xxx";
這樣的 SQL 語(yǔ)句基本上是全表查找,線(xiàn)性復(fù)雜度為 O(n),記錄數(shù)越多,性能也就越差.對(duì)于這種情況,我們可以有以下兩種辦法來(lái)提示性能:
分表,將年夜記錄數(shù)分割成幾塊小的記錄數(shù);
索引,針對(duì)name 字段建立索引,對(duì)付B-Tree索引的復(fù)雜度基本上是 O(logn);
2.2/ 索引
針對(duì)已建立索引字段,在 WHERE 和 ORDER BY 子句中 ,盡量不要在字段上做計(jì)算、類(lèi)型轉(zhuǎn)換、函數(shù)、空值判斷、字段連接等操作,因?yàn)檫@些操作將會(huì)破壞索引底本的性能.
2.3/ 多表查詢(xún)
關(guān)系型數(shù)據(jù)庫(kù)最多的操作就是多表查詢(xún),多表查詢(xún)主要有三個(gè)關(guān)鍵字,EXISTS、IN 和 JOIN.基原來(lái)說(shuō),現(xiàn)在的數(shù)據(jù)引擎對(duì) SQL 語(yǔ)句優(yōu)化得都很好了,EXISTS、IN 和 JOIN 在結(jié)果上有些不同,但性能基本上都差不多.
對(duì)付 JOIN 有三種實(shí)現(xiàn)算法,
嵌套循環(huán)(MySQL 只支持這種)
排序歸并,將兩個(gè)表依照查詢(xún)字段排序,再合并.
Hash 的 JOIN,主要辦理嵌套循環(huán)的 O(logn)的復(fù)雜度,使用一個(gè)臨時(shí)的 Hash 表來(lái)標(biāo)識(shí);
2.4/ 部門(mén)結(jié)果集
MySQL 中的 LIMIT、Oracle 的 ROWNUM、SQL Server 里的 TOP 都是在限制前幾條的返回成果.這樣給數(shù)據(jù)庫(kù)引擎很多可以調(diào)優(yōu)的空間.
2.5/ 字符串
由于字符串在 SQL 中操作性能比擬差,因此在創(chuàng)建數(shù)據(jù)結(jié)構(gòu)時(shí),我們的基本上原則是:能用數(shù)字表示的盡量使用數(shù)字來(lái)表示,如:時(shí)間、工號(hào)等.
2.6/ 全文檢索
對(duì)于Text 類(lèi)的文本字段查詢(xún),盡量不使用 LIKE 來(lái)做全文檢索,如果必要全文檢索功能,可以嘗試使用第三方組件,如 Sphinx、ELK等.
2.7/ 其它
不用 SELECT *,明確指出各個(gè)字段,多表查詢(xún)必定要在字段名前加上表名.
不消 HAVING,因?yàn)闀?huì)遍歷所有的記錄,性能極差.
盡可能地使用 UNION ALL代替 UNION.
索引過(guò)多,INSERT 和 DELETE 會(huì)越慢,UPDATE 如果是多半索引,也會(huì)慢,但如果只是一個(gè)索引,則只會(huì)影響一個(gè)索引表.
還有一點(diǎn)重要的,數(shù)據(jù)庫(kù)的各種操作都必要大量的內(nèi)存,所以要保證服務(wù)器有足夠的內(nèi)存.特別是針對(duì) 多表查詢(xún)的 SQL 語(yǔ)句,更是相當(dāng)?shù)暮膬?nèi)存.
3/ 總結(jié)
對(duì) SQL 語(yǔ)句的性能優(yōu)化,這里只是提供一個(gè)優(yōu)化偏向或約定.在日常使用過(guò)程還是根據(jù)具體使用場(chǎng)景和方式來(lái)決定,沒(méi)有絕對(duì)的方式.
歡迎參與《性能調(diào)優(yōu)攻略|SQL語(yǔ)句優(yōu)化》討論,分享您的想法,維易PHP學(xué)院為您提供專(zhuān)業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.vephp.com/jiaocheng/7842.html
相關(guān)知識(shí)
性能調(diào)優(yōu)攻略|SQL語(yǔ)句優(yōu)化
Python小游戲優(yōu)化全攻略
麥當(dāng)勞超值優(yōu)惠攻略
基于HBase健康大數(shù)據(jù)平臺(tái)性能優(yōu)化及應(yīng)用.doc
提升雅思口語(yǔ):健康類(lèi)短句全攻略!
MySQL 性能調(diào)優(yōu):數(shù)據(jù)庫(kù)的"極限運(yùn)動(dòng)訓(xùn)練"
商務(wù)禮儀:女性?xún)?yōu)雅站姿與蹲姿全攻略
廣州老年卡優(yōu)惠全攻略,速領(lǐng)
優(yōu)化游戲性能的軟件排行 優(yōu)化游戲性能的軟件推薦
優(yōu)化網(wǎng)絡(luò)環(huán)境金句怎么寫(xiě)
網(wǎng)址: 性能調(diào)優(yōu)攻略|SQL語(yǔ)句優(yōu)化 http://m.u1s5d6.cn/newsview1613784.html
推薦資訊
- 1發(fā)朋友圈對(duì)老公徹底失望的心情 12775
- 2BMI體重指數(shù)計(jì)算公式是什么 11235
- 3補(bǔ)腎吃什么 補(bǔ)腎最佳食物推薦 11199
- 4性生活姿勢(shì)有哪些 盤(pán)點(diǎn)夫妻性 10428
- 5BMI正常值范圍一般是多少? 10137
- 6在線(xiàn)基礎(chǔ)代謝率(BMR)計(jì)算 9652
- 7一邊做飯一邊躁狂怎么辦 9138
- 8從出汗看健康 出汗透露你的健 9063
- 9早上怎么喝水最健康? 8613
- 10五大原因危害女性健康 如何保 7828
- 居家瑜伽習(xí)練需求提升,「隨心瑜Home
- 健身女人在家鍛煉瑜伽居家健身仰臥起坐健康
- 可以還你一身輕松地居家瑜伽體式
- 適合居家鍛煉的瑜伽體式來(lái)了!跟著教練一起
- 適合居家鍛煉的瑜伽體式,簡(jiǎn)單動(dòng)作強(qiáng)化臀肌
- 居家瑜伽指南:10個(gè)簡(jiǎn)單體式讓你在家輕松
- 【4K18元】居家瑜伽伸展運(yùn)動(dòng)
- 居家徒手熱身操:告別運(yùn)動(dòng)損傷,高效提升訓(xùn)
- 居家健身熱身指南:避免運(yùn)動(dòng)損傷,提升訓(xùn)練
- 咖啡機(jī)推出“居家咖啡體驗(yàn)”新產(chǎn)品,口感醇