mysql查詢優化

2021-07-28 04:44:02 字數 1755 閱讀 4205

**用來加速資料庫查詢的技術有很多,但是最重要的方式就是為表建立索引。如果說你拋開索引這個方法而去通過其他方式去優化查詢速度,那純粹就是在浪費時間。下面先說說索引帶來的優點**:

1、索引是一種已經排好了順序,也就是索引值是有序的,但是沒有索引值的字段值是無序狀態的,當你要搜尋乙個沒有建立索引的表時,資料庫會全盤掃瞄表中的每一行資料,直到最後一行。但是當你為該錶增加索引之後,資料庫會使用各種技術來快速定位索引值。比如這個索引表,如果你想要找female中位置是3的資料行,因為索引已經排好順序了,3已經是當中最小的了,查詢將結束。

2、在多表聯合查詢查詢時,索引的優點更是被放大。比如你要在t1,t2,t3 三張表中查詢每個字段相等的資料。比如:

select t1.i1,t2.i2,t3.i3

from t1 inner

join t2 inner

join t3

where t1.i1=t2.i2 andt2.i2= t3.i3;

假設每個表有1000行,那麼可能的組合有1000*1000*1000種,這可是一種巨大的浪費,假設用了索引,那麼我們只需要t1進行全盤掃瞄就其他兩個表可以通過索引查詢,這個查詢方式比不用索引快樂100萬倍。這種優化效果可想而知。

接下來介紹一下幾種常見的索引場合

1、索引可以加快where字句的查詢以及連線表中的查詢,加快搜尋的速度

2、對於使用min()或者max()、order by 、group by字句可以高效地查詢以及分類和分組

3、只查詢索引表裡面的資料,不想查詢其他資料行的值,這就跟電腦裝了固態一樣,直接在固態裡面拿資料了

上面把索引說的那麼好,但是其實也是有一點代價的,只是這種代價被索引的優點所掩蓋了,不可能為了代價不去用索引,了解代價只是為了更加高效地使用索引而已。索引的代價分為時間代價和空間代價。

1、時間代價在查詢上為我們提高了速度,但是在插入、刪除、更新資料的時候,不單只是考慮插入資料、刪除資料、更新資料了,還要為更改索引花費時間,但是有什麼所謂了呢,我們大部分的時間都在查詢資料是吧。

2、空間上的代價就比較明顯了,innodb儲存引擎將行與索引值分開放置,但是innodb引擎只是用乙個表空間,管理所有的資料儲存以及索引儲存,這樣很容易達到表的上限。(即使innodb引擎不會受到作業系統檔案大小限制)

接下來就要選擇合適的索引了

1、為用於搜尋、排序或者分組的列建立索引。對於一些輸出展示的列可以不用建立索引。也就是對於where子句後面的查詢條件以及排列條件進行建立索引

2、選擇重複值少的字段設定索引。比如對於性別字段,不是男就是女重複性非常大。索引毫無用處。

3 、選擇索引短小值。如果你將文章內容建立索引,那就是一種不明智的選擇,這麼長的值會讓資料庫引擎很難堪的。短小的值索引速度快,可以減少對i/o請求。

4、索引字串的字首。根據第三個要求的特點,可以選擇將長的數值擷取前面的字元(前面字元盡量能代表唯一性),作為索引。

5、利用最左字首。這是對於建立包含n列的符合索引。比如乙個符合索引包括(x1,x2,x3),則下面三種情況都可以充分利用索引

x1,x2,x3

x1,x2

x1

6、不要建立過多的索引,這個在代價裡面闡述過了,不是越多越好,要懂得高效實用

7、利用慢查詢日誌找出那些效能低下的查詢。在日誌中頻繁出現的查詢可能不是最優查詢,應該考慮優化

這是在如何建立索引上的優化,接下來一章將講述如何利用索引在程式上進行優化。謝謝觀賞。

查詢優化(MySQL優化查詢)

關聯查詢太多join 設計缺陷或不得已的需求 資料庫伺服器調優及各個引數設定不適當 緩衝 執行緒數等 慢查詢日誌 找出執行速度慢的sql語句 慢查詢的開啟並捕獲 explain 慢sql分析 show profile查詢sql在mysql伺服器裡面的執行細節和生命週期情況 sql資料庫伺服器的引數調...

mysql統計查詢優化 Mysql查詢優化

效能涉及的層面很多,但是在操作層面,主要有表結構設計優化 索引優化和查詢優化 查詢的生命週期大致可以分為,從客戶端 到服務端 在伺服器上解析 生成執行計畫 執行 返回結果給客戶端 sql執行流程 具體優化技巧 1.消除外連線 2.消除子查詢 盡量用join代替子查詢,雖說mysql查詢優化器會進行優...

MySQL優化 查詢優化

在每乙個消耗大量時間的查詢中,都能看到一些不必要的額外操作 某些操作被額外地重複了很多次 某些操作執行得太慢等。優化查詢的目的就是減少和消除這些操作所花費的時間。查詢效能低下最基本的原因是訪問的資料太多。所以需要考慮是否向資料庫請求了不需要的資料 1 多表關聯時,或獲取單錶資料時,盡量避免不加思考地...