請考慮下面的例子。假設我們正在爲在線書店構建數據庫。我們有一個Book表包含n條記錄,一個Type表包含m條記錄。 n是一個非常大的數字。 m很小。MySQL可以加入XML字段(或JSON)嗎?
--------
Book
---------
BookId
BookName
BookType
---------
-------
Type
--------
TypeId
TypeName
---------
傳統的方式加入這兩個表將創建一個名爲的BookType
----------
BookType
----------
BookTypeId
BookId
TypeId
----------
如果我們想要檢索與類型一本書記錄第三表格中,我們可以這樣做:
select B.*, T.Name from Book B
inner join BookType BT on B.BookId = BT.BookId
inner join Type T on BT.TypeId = T.TypeId
由於Book表非常大,所以BookType表甚至更大。由於數據庫索引使用的是類似B樹的算法,因此時間成本爲:2log(n)+ Cm。對? (隨着書籍表和表的BookType索引)
但是,如果我們能在TYPEID存儲爲一個JSON數組,並使用它的加入,那麼我們就可以在一次旅行中獲取數據。時間將是log(n)+ Cm,它至少快兩倍。語法可能類似於:
select B.*, T.Name from Book B
inner join Type T on ParseJsonAsIntArray(BookType) = T.TypeId
我找不到類似ParseJsonAsIntArray()的MySQL函數。他們爲什麼不這樣做?如果我錯過了明顯的道歉。
我明白了。所以如果查詢是單向的,那麼標準化會更快,對嗎?我不認爲我會這樣做,因爲它聽起來像對我來說很多額外的代碼。只是好奇他們爲什麼沒有它。 –
自2010年以來請求的功能:http://bugs.mysql.com/bug.php?id=55308 –