免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

mysql的優化方案有哪些

這篇文章主要介紹“MySQL的優化方案有哪些”,在日常操作中,相信很多人在mysql的優化方案有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”mysql的優化方案有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創新互聯公司是一家專業提供吐魯番企業網站建設,專注與網站設計制作、做網站、H5響應式網站、小程序制作等業務。10年已為吐魯番眾多企業、政府機構等服務。創新互聯專業網站建設公司優惠進行中。

1. 字段選擇優化

  • 表字段 not null,因為 null 值很難查詢優化且占用額外的索引空間,推薦默認數字 0。

  • 數據狀態類型的字段,比如 status, type 等等,盡量不要定義負數,如 -1。因為這樣可以加上 UNSIGNED,數值容量就會擴大一倍。

  • 可以的話用 TINYINT、SMALLINT 等代替 INT,盡量不使用 BIGINT,因為占的空間更小。

  • 字符串類型的字段會比數字類型占的空間更大,所以盡量用整型代替字符串,很多場景是可以通過編碼邏輯來實現用整型代替的。

  • 字符串類型長度不要隨意設置,保證滿足業務的前提下盡量小,用整型來存 IP。

  • 單表不要有太多字段,建議在20以內。

  • 為能預見的字段提前預留,因為數據量越大,修改數據結構越耗時。

2. 索引設計優化

索引,空間換時間的優化策略,基本上根據業務需求設計好索引,足以應付百萬級的數據量,養成使用 explain 的習慣,關于 explain 也可以訪問:explain 讓你的 sql 寫的更踏實了解更多。

  • 一個常識:索引并不是越多越好,索引是會降低數據寫入性能的。

  • 索引字段長度盡量短,這樣能夠節省大量索引空間

  • 取消外鍵,可交由程序來約束,性能更好。

  • 復合索引的匹配最左列規則,索引的順序和查詢條件保持一致,盡量去除沒必要的單列索引。

  • 值分布較少的字段(不重復的較少)不適合建索引,比如像性別這種只有兩三個值的情況字段建立索引意義不大。

  • 需要排序的字段建議加上索引,因為索引是會排序的,能提高查詢性能。

  • 字符串字段使用前綴索引,不使用全字段索引,可大幅減小索引空間。

3.查詢語句優化

  • 盡量使用短查詢替代復雜的內聯查詢。

  • 查詢不使用 select *,盡量查詢帶索引的字段,避免回表。

  • 盡量使用 limit 對查詢數量進行限制。

  • 查詢字段盡量落在索引上,尤其是復合索引,更需要注意最左前綴匹配。

  • 拆分大的 delete / insert 操作,一方面會鎖表,影響其他業務操作,還有一方面是 MySQL 對 sql 長度也是有限制的。

  • 不建議使用 MySQL 的函數,計算等,可先由程序處理,從上面提的一些點會發現,能交由程序處理的盡量不要把壓力轉至數據庫上。因為多數的服務器性能瓶頸都在數據庫上。

  • 查詢 count,性能:count(1) = count(*) > count(主鍵) > count(其他字段)。

  • 查詢操作符能用 between 則不用 in,能用 in 則不用 or。

  • 避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等這樣的操作符,因為這些查詢無法使用索引。

  • sql 盡量簡單,少用 join,不建議兩個 join 以上。

千萬級數據量

到了這個階段的數據量,數據本身已經有很大的價值了,數據除了滿足常規業務需求外,還會有一些數據分析的需求。而這個時候數據可變動性不高,基本上不會考慮修改原有結構,一般會考慮從分區,分表,分庫三方面做優化:

1.分區

分區是根據一定的規則,數據庫把一個表分解成多個更小的、更容易管理的部分,是一種水平劃分。對應用來說是完全透明的,不影響應用的業務邏輯,即不用修改代碼。因此能存更多的數據,查詢,刪除也支持按分區來操作,從而達到優化的目的。如果有考慮分區,可以提前做準備,避免下列一些限制:

  • 一個表最多只能有1024個分區(mysql5.6之后支持8192個分區)。但你實際操作的時候,最好不要一次性打開超過 100 個分區,因為打開分區也是有時間損耗的。

  • 如果分區字段中有主鍵或者唯一索引列,那么所有主鍵列和唯一索引列都必須包含進來,如果表中有主鍵或唯一索引,那么分區鍵必須是主鍵或唯一索引。對于這點,筆者補充說明,筆者本人是按 created_at 所在天進行分區的,所以建表如下

CREATE TABLE `sms_record_hash` (
  ...... 省略字段定義
  PRIMARY KEY (`id`,`created_at`)  
  ......
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
/*!50100 PARTITION BY HASH (DAYOFYEAR(created_at))
PARTITIONS 366 */;

  • 分區表中無法使用外鍵約束。

  • NULL值會使分區過濾無效,這樣會被放入默認的分區里,請千萬不要讓分區字段出現 NULL。

  • 所有分區必須使用相同的存儲引擎。

2.分表

  • 分表分水平分表和垂直分表。

  • 水平分表即拆分成數據結構相同的各個小表,如拆分成 table1, table2…,從而緩解數據庫讀寫壓力。

  • 垂直分表即將一些字段分出去形成一個新表,各個表數據結構不相同,可以優化高并發下鎖表的情況。

  • 可想而知,分表的話,程序的邏輯是需要做修改的,所以,一般是在項目初期時,預見到大數據量的情況,才會考慮分表。后期階段不建議分表,成本很大。

3.分庫

分庫一般是主從模式,一個數據庫服務器主節點復制到一個或多個從節點多個數據庫,主庫負責寫操作,從庫負責讀操作,從而達到主從分離,高可用,數據備份等優化目的。

當然,主從模式也會有一些缺陷,主從同步延遲,binlog 文件太大導致的問題等等,這里就不細講了!

到此,關于“mysql的優化方案有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注創新互聯網站,小編會繼續努力為大家帶來更多實用的文章!

文章標題:mysql的優化方案有哪些
文章位置:http://m.newbst.com/article8/jhseop.html

成都網站建設公司_創新互聯,為您提供網站設計手機網站建設App設計企業建站網站設計公司網站排名

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站托管運營