首頁 資料庫 mysql教程 總結一些MySQL陷阱

總結一些MySQL陷阱

Mar 23, 2018 pm 05:06 PM
mysql 陷阱

這次帶給大家總結一些MySQL陷阱,在使用MySQL中的注意事項有哪些,以下就是實戰案例,一起來看一下。

Mysql安裝簡單,速度較快,功能豐富。另外它還是開源運動的標桿,它的偉大成就向我們展示了一個成功的公司是可以建立在開源程式碼之上的。

然而用過mysql的人都曾對著顯示器揮舞過拳頭。但你不可能發明一種每秒能保存成千上萬行網路數據,並且一點錯誤都沒有的技術吧。

為了在這個夏天躁起來,我們列舉了8個抱怨開源關係型資料庫的理由。以下列舉的理由中不僅限於 MySQL,有些是針對關係型資料庫的。如果我們沒有理清楚關係型資料庫和 MySQL,我們將會永遠陷入90年代的思想。我們需要推倒然後重建這些。或者我們轉向使用一個最近流行的,存在時間沒有長到可以列出一堆像下面一樣的理由的資料庫。

1、根深蒂固的bugs

任何大的軟體包都有 bug。但稍微深入了解一下,就會發現和 Mysql 相關的 bugs 自成系統。突然你需要留心,因為 NULL 並不是以同樣的方式出現,外鍵約束也沒有像你想像的那樣執行,連主鍵自動增長也會出錯。

小問題大量存在,而且並不總是可以修復,這就是為什麼有些人保持一個清單。還好 MySQL 維護一個非常好的 bug 報告系統,讓我們可以知道我一些我們無法想像的事情,知道其他人也正在經歷同樣的磨難。

2、關係表的不靈活性

關係表具有條理性,條理性是好的-但是,它使得程式設計師不得不編造或硬塞一些資料到已經定義好模式的欄位。 NoSQL開始越來越受到歡迎的原因之一,就是它為程式設計師提供了足夠的彈性,來加速資料庫的使用。如果一個街道地址需要增加一行,那麼,你可以將它輕鬆地插入到一個NoSQL文件中。如果你想新增一個完整的新的資料區塊,無論它包含什麼內容,文件模型也可以原封不動地接受你的數據,而不必改為它要求的資料格式。

試想一下,你用整數格式建立了一個全部是郵編的表格。這個表是十分有效率的,它執行的規則也很好。突然一次,有人上傳了一個使用了連字符的九位數郵編。或者還有可能,你得到了一位來自加拿大客戶的信件,上面寫有郵遞區號。

這時,一切都亂了。老闆要求網站要在幾小時內恢復正常運作。然而,現在已經沒有時間來重建資料庫。程式設計師可以做什麼?或許,可以使用駭客手段把加拿大郵遞區號由base64的數位格式改為base 10格式?或是設定一個使用轉義編碼的輔助表格,用來說明真正的郵遞區號或其他?誰知道呢?到處都有駭客,他們都是危險的。但你沒有時間搞定它。

MySQL的關聯規則讓每個人都誠實謹慎,但它能強制我們避免易受攻擊和欺騙的麻煩。

3、JOIN聯合查詢

曾幾何時,將資料分錶保存是電腦科學史上的偉大創新。分開後的表格不僅結構簡單,也簡化了使用。但它卻需要使用join語句來查詢。

sql透過一系列join建構的複雜查詢將開發者推入了困惑與絕望的深淵。而且儲存引擎也需要以最優的方式來有效率地解析join語句。開發者需要絞盡腦汁編寫查詢語句,然後資料庫對其進行解析。

這就是許多注重運行速度的開發者放棄資料分錶轉而使用不規範資料表的原因。不區分資料實體,將所有資料保存到一個大表中—以避免複雜的查詢。這樣確實很快,而且伺服器也不會耗盡記憶體。

磁碟空間現在很廉價。 8TB的磁碟已經在售,更大的也要上市了。我們不再需要為使用join而絞盡腦汁了。

4、分支的混亂

是的,一個可靠的、得到良好支援的MySQL分支,可以帶來競爭和選擇,但它也造成困惑和混亂。更糟的是,一個稱為MariaDB的MySQL分支,由Monty Widenius維護著。他同樣也在參與編寫MySQL。那麼,MariaDB才是真正獨立的值得我們擁護的嗎?還是它是MySQL?我們是否應該堅持使用由創建原始MySQL資料庫的組織運營的核心程式碼?或者我們應該加入那些被認為更聰明的,往往很酷的背叛者?

還有,我們該如何獲得關於相容性的資訊?一方面,我們被確信MariaDB和MySQL十分相似。另一方面,我們要相信有差異──不然為什麼大家都在爭論它?也許它們在性能和我們查詢的範圍內,在兩個陣營中工作方式相同?但也許他們不同-或將來會不同。

5、儲存引擎混亂

MySQL不是事實上的相同的資料庫;它由幾個資料庫組成,它們的大多數細節都被統一的表面所掩蓋。在開始的時候,有一個MyISAM引擎,它很快但在前後一致上不能做到完備。有時候你需要速度並且可以接受不一致的結果時是很好的。

當人們需要更多時,具備完整事務支援的InnoDB出現了。但這還不夠。現在,它可能有20種儲存引擎的選擇——這足以使一個資料庫管理員瘋狂。當然,有些時候在不同的儲存引擎之間切換而不必重寫你的SQL是很好的,但是切換後總是會帶來混亂。這個表格我選擇的引擎是 MyISAM 還是 innoDB 呢?或者,我決定輸出的資料是CSV格式的嗎?

6、獲利的動機

雖然MySQL 是一款成功的開源產品,但它仍然是一門生意,裡面滿是靠它獲得薪水的專業開發者。當大多數用戶持續享受開源許可證帶來的最佳體驗時,毫無疑問這家公司還在為賺取足夠的錢來維持營運而努力。這導致自由代碼在「社群版」和出售給企業的完整產品之間產生了奇怪的分岐。
你該付錢嗎?你在這裡賺了多少錢?在社群版之上開展經營行為是否公平?企業版中額外的功能,是否只是一個噱頭來引誘我們不斷付費呢?這至少說明一點,它是另一組需要回答的問題。選用哪個版本?遵照哪種許可證?選用它的哪個功能集?

7、原生JSON 支援的缺乏

看MySQL 的年齡最好的方法是安裝它,然後你會意識到需要添加更多的驅動程式使它可用。 MySQL 通常在 3306 連接埠上通信,它一般輸出的是它自己難以理解的格式化資料。如果你想讓你的程式碼和它通信,你必須加入另一層的程式碼,將 MySQL 的語言轉換成有用的東西。這些層的程式碼,以庫的形式分發,經常需要人們購買一個商業的許可證。

現代資料儲存層通常直接以 JSON 通訊。雖然 MySQL 和 MariaDB 現在有能力解析 SQL 中的 JSON 部分,但這還遠遠不夠好,原生的 JSON 介面已經在 CouchDB,MongoDB,或任何最新的工具中廣泛使用。

8、封閉來源和專有模組的興起

我有說過 MySQL 是開源的嗎?它是,但除了一些在」開源核心「週邊開發的一些較新的、非開源的程式碼、專有模組。程式設計師需要吃飯,Oracle需要拿它的辛苦成果來換錢,這是商業的現實之一。它不像那些醫院,使用 MySQL 可以免費醫療照護。它不像那些農民,使用 MySQL 可以贈送食物。

要求 MySQL 永遠堅持在一個很高的標準是有點不公平的,因為開源的成功可能是個圈套。這是因為它開始可以免費,但這並不意味著它可以始終如此。如果企業需要許多新的功能,他們將不得不以這種或那種方式付費。有時向 Oracle 付費,比自己來寫程式碼便宜得多。有時商業的、不開源的程式碼是有意義的。事實不言而喻。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

Vue製作圖片輪播

#

JS取得select下拉方塊中第一順位元素內的值

#安裝Electron失敗怎麼處理

以上是總結一些MySQL陷阱的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

phpmyadmin怎麼打開 phpmyadmin怎麼打開 Apr 10, 2025 pm 10:51 PM

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

navicat premium怎麼創建 navicat premium怎麼創建 Apr 09, 2025 am 07:09 AM

使用 Navicat Premium 創建數據庫:連接到數據庫服務器並輸入連接參數。右鍵單擊服務器並選擇“創建數據庫”。輸入新數據庫的名稱和指定字符集和排序規則。連接到新數據庫並在“對象瀏覽器”中創建表。右鍵單擊表並選擇“插入數據”來插入數據。

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

navicat怎麼新建連接mysql navicat怎麼新建連接mysql Apr 09, 2025 am 07:21 AM

可在 Navicat 中通過以下步驟新建 MySQL 連接:打開應用程序並選擇“新建連接”(Ctrl N)。選擇“MySQL”作為連接類型。輸入主機名/IP 地址、端口、用戶名和密碼。 (可選)配置高級選項。保存連接並輸入連接名稱。

redis怎麼使用單線程 redis怎麼使用單線程 Apr 10, 2025 pm 07:12 PM

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

MySQL和SQL:開發人員的基本技能 MySQL和SQL:開發人員的基本技能 Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

See all articles