golang-mysql 簡易優化

前言

在大衆數據庫中,mysql 算是明星中的頂流了,可以說市面上 70% 的應用都使用到了 mysql 數據庫,下面我們就講解一下在 golang 中如何對 mysql 進行優化及在使用過程中如果優雅的使用 mysql。

安裝 mysql

golang 中有很多鏈接 mysql 包,我這裏使用到了github.com/go-sql-driver/mysql第三方包。

go get -u github.com/go-sql-driver/mysql

命令行根目錄執行以上命令安裝模塊包,接下來我們就可以使用該模塊包連接數據庫了。

package main

import (
       _"github.com/go-sql-driver/mysql"
        "database/sql"
       "fmt"
)

var DB 

func main() {
       db,err := sql.Open("mysql","username:password@tcp(127.0.0.1:3306)/database")
       defer db.Close()
       if err != nil {
              fmt.Println(err)
              os.Exit(3306)
       }
       
       DB = db
       fmt.Println("mysql connection succcessfully!")
}

此時,我們可以看到 mysql 已經連接成功。

優化操作 mysql 數據庫

我們知道在 golang 中,協程的高併發非常適合進行 io 操作,並且協程對於性能的消耗比線程要低特別多。

所以,我們可以使用協程來操作 mysql 進行插入數據和獲取數據。

爲此,我總結了以下幾點,來說明 mysql 的優化從哪幾個方面進行:

  1. 優先使用協程進行 mysql 讀寫操作。

  2. 避免使用NULL字段。

  3. 不用外鍵,請由程序保證約束。

  4. 在查詢單表數據時,應當避免使用SELECT *操作,按需獲取數據。

  5. 少用連接 join,多用 group by,分組、自動排序。

  6. 禁止使⽤ order by rand()。

  7. 禁⽌單條 SQL 語句同時更新多個表。

  8. 禁止在數據庫中跑大查詢。

  9. SQL 語句要求所有研發,SQL 關鍵字全部是大寫,每個詞只允許有一個空格。

  10. 儘量使用事務修改,並減少使用單條 sql 語句。

  11. 對於查詢頻繁的表,應當建立索引,並禁止SELECT *操作。

  12. 修改操作應當加鎖Mutex確保數據的一致性。

對於上述所講,只要嚴格遵守下來,mysql 數據庫在操作數據的過程中會快不少,並且代碼會非常優雅,但是前期會非常困難,個人感覺前期會很彆扭。

後記

golang 天生支持操作數據庫,不需要其他語言的幫助。

其實對於常規操作來說,mysql 也是有一定的抗壓性的,如果數據量不是很大,這些優化的效果會非常非常小,在一定業務的支撐下或者各種硬性要求下,對於 mysql 的優化也是非常困難的,很多都是在日常使用中進行總結和提升。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/R7Kk2Pz5JbUCQ4LT8YA85Q