CREATE TABLE Attributes ( id VARCHAR(40), type VARCHAR(16), data VARCHAR(2048), PRIMARY KEY(id,type) );
這是我試圖運行的查詢的一般格式。一般的想法是,'對象'具有唯一的id,然後像JavaScript對象那樣具有鍵/值對。如何減少此查詢中連接表的數量?
SELECT a1.id, a1.data, a2.data, a3.data, a4.data, a6.data FROM Attributes a1, Attributes a2, Attributes a3, Attributes a4, Attributes a5 LEFT JOIN Attributes a6 ON (a6.id=a5.id AND a6.type = 'Foreign Id') WHERE a1.id=a2.id AND a1.id=a3.id AND a1.id=a4.id AND a1.id=a5.id AND a1.type = 'First Name' AND a2.type = 'Middle Name' AND a3.type = 'Last Name' AND a4.type = 'Timestamp' AND a5.type = 'Count' AND a5.data = 'MY_ID'
在此查詢中'Foreign Id'
是一個可選屬性。問題是我得到
SELECT將檢查超過MAX_JOIN_SIZE行;檢查你的 WHERE並使用SET SQL_BIG_SELECTS = 1或SET MAX_JOIN_SIZE =#如果 SELECT沒問題。
我意識到我可以這麼說,但警告讓我擔心這個查詢的效率非常低。有沒有更好的方式來制定查詢?
哈哈,真棒,謝謝! – chacham15
+1,只是在列中存儲屬性將是* normalization *,而不是* denormalization *。 EAV反模式甚至不是關係;它不能以任何正常形式。 –
在我的情況下,我沒有選擇,但爲了知道更好的是不是EAV NOSQL的一般前提? – chacham15