mysql效能優化

2021-09-23 13:29:13 字數 1922 閱讀 6764

1. 獲取唯一行時使用limit 1

有時當你查表時,你已經知道你正在查詢的結果只有一行。你可能正在獲取唯一記錄,或者你可能只是查詢是否存在滿足你的where子句條件的記錄。

在這種情況下,將limit 1新增到查詢條件中可以提高效能。這樣,資料庫引擎將在找到剛剛第乙個記錄之後停止掃瞄記錄,而不是遍歷整個表或索引。

2. 避免使用select *,指定你要搜尋的字段

從資料表中讀取的資料越多,查詢操作速度就越慢。它增加了磁碟操作所需的時間。此外,當資料庫伺服器與web伺服器分開時,由於必須在伺服器之間傳輸資料,將會有更長的網路延遲。

3. 保證命中索引

4. 如果可以的話使用not null(且不能在允許null的字段中建立索引)

除非你有非常重要的理由使用null值,否則你應該設定你的列為not null。

首先,問一下你自己在空字串值和null值之間(對應int欄位:0 vs. null)是否有任何的不同.如果沒有理由一起使用這兩個,那麼你就不需要乙個null欄位(你知道在oracle中null和空字串是一樣的嗎?)。

null列需要額外的空間,他們增加了你的比較語句的複雜度。如果可以的話盡量避免它們。當然,我理解一些人,他們也許有非常重要的理由使用null值,這不總是一件壞事。

摘自mysql 文件:

"null列在行記錄它們的值是否為null時需要額外的空間。例如myisam 表,每乙個null列擁有額外的乙個位元,聚集在最近的位元組。"

5. 固定長度(靜態)的表會更快(所有字段長度固定)

(譯者注:這裡提到的表的長度,實際是指表頭的長度,即表中每條資料占用的空間大小,而不是指表的資料量)

如果表中所有列都是「固定長度」,那麼這個表被認為是「靜態」或「固定長度」的。不固定的列型別包括 varchar、text、blob。即使表中只包含乙個這些型別的列,這個表就不再是固定長度的,mysql 引擎會以不同的方式來處理它。

固定長度的表會提高效能,因為 mysql 引擎在記錄中檢索的時候速度會更快。如果想讀取表中的某一地,它可以直接計算出這一行的位置。如果行的大小不固定,那就需要在主鍵中進行檢索。

它們也易於快取,崩潰後容易重建。不過它們也會占用更多空間。例如,如果你把乙個 varchar(20) 的字元改為 char(20) 型別,它會總是占用 20 個位元組,不管裡面存的是什麼內容。

你可以使用「垂直分割槽」技術,將長度變化的列拆分到另一張表中。來看看:

6. int,smallint,tinyint使用場景

三者都是以固定長度儲存在資料庫中,int 4個位元組【-2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647)。長度範圍0-10】,smallint 兩個位元組【 帶符號的範圍是-32768到32767。無符號的範圍是0到65535。 長度0-5】, tinyint 1個位元組【0-255。長度0-3】的整數

7.慎用負向查詢,如!=,<>,not in,not like

不用百分號開頭的模糊查詢

因為此兩種方法不命中索引,會導致全表掃瞄

8.不要在資料庫欄位上計算或者執行函式

這樣就不能命中索引

9.大表不要用join和子查詢

10.用in來代替or,舊版本mysql的or不能命中索引,且or更消耗cpu

11.莫占用資料庫的cpu來實現複雜的邏輯(join,子查詢,觸發器,使用者自定義函式等)

12.不要用外來鍵,通過程式來約束

13.不要使用float或double,計算時會產生精度上的錯誤

14.每張表都要有updated_at,created_at操作

15.垂直分割,發訪問頻率大的字段放一起,頻率小的字段放一起

mysql效能優化 mysql效能優化

優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...

mysql的效能優化 mysql效能優化

檢視安裝指令碼 select version 非互動式超時時間,如jdbc show global variables like wait timeout 互動式超時時間,如資料庫工具 show global variables like interactive timeout show sessi...

mysql 效能優化 命令 mysql效能優化

發現問題 當發現程式執行比較慢的時候,首先排除物力資源問題之後,就將注意力轉向mysq資料庫 1 首先確定執行慢的sql語句 mysql show full processlist 2 確認低效的查詢 多次執行第一步發現time耗費大的sql語句。檢視耗費的時間。3 分析效能 為sql生成乙個執行計...