好問題。你關於存儲大量相似值的觀察是有效的。
優化您的設計的解決方案是使用關係表模式。通過關係表,您可以在字段中使用通用值並將它們移到另一個表中,然後創建表的鏈接。
作爲一個(無關的)示例,不是將國家名稱存儲在一個字段中一百萬次,而是創建一個指向國家/地區列表的字段。好處是,你將爲一個數字存儲(一百萬次)幾個字節,而與(百萬次)幾百字節的名稱相比。
好處大於存儲,因爲比較數字比字符串更有效。例如,比較一次檢查一個字符串中的每個字母(想象一下運行檢查if($ val ='一個很長的字符串')一百萬次)是否需要計算機ONE比較來檢查($ val == 10)。
http://en.wikipedia.org/wiki/Relational_database
例如,假設你有一個關鍵字數量有限。
CREATE TABLE video
(
video_id int(11) NOT NULL auto_increment,
keyword_id int(11),
website varchar(255),
url string,
PRIMARY KEY (video_id)
);
CREATE TABLE keywords
(
keyword_id int(11) NOT NULL auto_increment,
keyword_name varchar(255),
PRIMARY KEY (keyword_id)
);
注意到視頻表中有一個字段keyword_id,而不是KEYWORD_NAME,因此這將存儲一個數字,而不是一個字符串。您的數據的示例將是
- video
id keyword_id url
1 1 http://domain1/path1/
2 2 http://domain2/path1/
3 2 http://domain3/path4/
:
- keywords
keyword_id keyword_name
1 short keyword
2 a long key that has many, many, many characters
如果您知道關鍵字id,那麼很容易搜索視頻。
SELECT keyword FROM keywords WHERE keyword_name = 'car';
:
SELECT * FROM video where keyword_id = ':keyword_id';
或
SELECT keyword_name, website, url
FROM video
JOIN keyword ON keyword_id
WHERE keyword_name = 'car'
我還隔着幾個職位來到SO。
Relational Database Design Patterns?
Relational Database and Normalization for Relational Tables
Best way with relation tables
如果什麼視頻在多個網站上?你如何處理多個單一的「關鍵字」? – jeff
我建議你使用:http://datatables.net/ –