MySQL 是一種關聯資料庫管理系統,關聯資料庫將資料儲存在不同的表中,而不是將所有資料放在一個大倉庫內。這樣就增加了速度並提高了靈活性。
MySQL 的 SQL “結構化查詢語言”,SQL 是用於訪問資料庫的最常用標準化語言。
MySQL 軟體採用了 GPL( GNU 通用公共許可證),由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了 MySQL 作為網站資料庫。
本期技術週刊一起了解下 MySQL ,歡迎大家閱讀 ~
文章推薦
《10 分鐘教你寫一個資料庫》作者:艾小仙
今天教大家藉助一款框架快速實現一個資料庫,這個框架就是 Calcite,下面會帶大家透過兩個例子快速教會大家怎麼實現,一個是可以透過 SQL 語句的方式可以直接查詢檔案內容,第二個是模擬 Mysql 查詢功能,以及最後告訴大家怎麼實現 SQL 查詢 Kafka 資料。
《學習 MySQL 必須掌握的 13 個關鍵字,你 get 了嗎?》作者:Java 架構師
三正規化:
- 第一正規化:每個表的每一列都要保持它的原子性,也就是表的每一列是不可分割的;
- 第二正規化:在滿足第一正規化的基礎上,每個表都要保持唯一性,也就是表的非主鍵欄位完全依賴於主鍵欄位;
- 第三正規化:在滿足第一正規化和第二正規化的基礎上,表中不能產生傳遞關係,要消除表中的冗餘性;
《Mysql 資料庫的批次插入或更新(Upsert)》作者:songofhawk
這個問題已經困擾我一段時間了,對於大量資料的插入或更新,批次操作肯定比每條記錄呼叫一次快得多,新資料可以用 insert 批次插入,老資料可以用 replace into 批次更新。但如果不知道資料是否存在(是否有唯一 key 和資料庫中已有記錄重複)想在一批資料庫中,插入新記錄,更新老記錄怎麼辦?
之前甚至想過封裝一個函式,先用 select ... in 批次查詢,然後分兩組插入和更新,但一方面通用性不佳,另一方面這不是一個原子操作,對於併發的情況,有可能查詢的時候記錄不存在,插入的時候就已經存在了。
仔細 google 了一下,才發現這種“存在 update,不存在 insert ”的動作,有個專有名詞,叫做“upsert”,相當形象。解決方案呢,不同資料庫各有自己的解決方案和方言,Mysql 叫做 on duplicate key update,PostgreSql 中叫做 on confict do update。
《Mysql 45 講關鍵知識》 作者:瘋狂小兵
是因為 Mysql 更新資料只寫到 redo 的 log 裡,達到閾值後會刷髒頁,佔用 CPU 資源。髒頁是指記憶體頁資料和磁碟頁資料不一致的情況。
發生場景
- redolog 寫滿到閾值後,需將對應的記憶體頁資料刷到磁碟上。 需要儘量避免,否則所有更新操作都會被 hang 主
- 記憶體不足,刷髒頁到磁碟上。常態,最需要關心的。
- 資源空閒時,刷頁。也會時不時的刷下髒頁。資源空閒期刷髒頁,系統不會有壓力。
- Mysql 正常關閉的時候,刷髒頁到磁碟。關閉時刷髒頁,正常操作,也不會關心效能。
影響效能的幾種情況
- 一次刷髒頁太多。
- 日誌寫滿了,更新全部堵塞住。
《為什麼說 MySQL 單錶行數不要超過 2000w ?》作者:碼猿技術專欄
作為在後端圈開車的多年老司機,是不是經常聽到過,“mysql 單表最好不要超過 2000w”,“單表超過 2000w 就要考慮資料遷移了”,“你這個表資料都馬上要到 2000w 了,難怪查詢速度慢”
這些名言民語就和 “群裡只討論技術,不開車,開車速度不要超過 120 碼,否則自動踢群”,只聽過,沒試過,哈哈。
下面我們就把車速踩到底,幹到 180 碼試試…….
《我操作 MySQL 的驚險一幕》作者:god23bin
情況:漏了某一個欄位 X,需要將 A 表的這個欄位列值更新到 B 表
條件:A 中的 id 欄位的值等於 B表中的 id 欄位的值 且 A 中的 name 欄位的值等於 B 中 name 欄位的值(條件為什麼這樣寫?)。
條件這樣寫主要是因為 表和表之間的關聯關係 可能有多個欄位,此處只選二個欄位,多個依此類推。
操作:
- 一張表的資料插入到另一張表,可以這樣寫:
INSERT INTO 目標表(欄位1, 欄位2, ...) SELECT 欄位1, 欄位2, ... FROM 來源表 WHERE 條件;
問答推薦
- MySQL 一千萬的資料量如何一秒內實現模糊搜尋?
- MySQL 語句求助?
- MySQL 如何分組統計失敗率?
- MySQL 生產環境資料表 10 億,不停服,想把自增 id int 改成 bigint 有什麼好的辦法嗎?
- 單列索引建立的順序 會不會影響查詢速度?
- MySQL 資料表新增一行記錄,會不會自動按主鍵自動排序插入,還是會排在最後?
- 用於解決樹形結構儲存的閉包表,憑什麼能快速獲取某個節點的祖先節點/父節點/子節點?
- MySQL 刪除資料的時候,會不會走索引?
- MySQL 商品銷售情況統計查詢特別慢,如何最佳化呢?
- MySQL 如何僅返回外表最新記錄符合特地條件的內表記錄?
# SegmentFault 技術週刊 #
「技術週刊」是社群特別推出的技術內容系列,一週一主題。
每週二更新,歡迎「關注」。大家也可以在評論處留言自己感興趣的主題,推薦主題相關的優秀文章。
如有問題可以新增小姐姐微信~