2009-07-12 172 views
0
 
I was just looking at the MySql database created by drupal after I installed it. 
All the tables are in MyISAM. 

With a complex software like drupal, wouldn't it make more sense to 
use foreign keys and hence InnoDB tables to enforce referential integrity? 

Without foreign keys all the constraint checking will happen at the 
PHP end. 
+0

人們會認爲Drupal想要保持這種參照完整性,但他們認爲使用任何數據庫供應商的能力更重要。欲瞭解更多信息,請參閱http://drupal.org/node/911352 P.S.我知道我是張貼在一箇舊帖子中,但我想幫助那些搜索。 – 2012-07-19 14:54:33

回答

3

MySQL提供各種數據庫引擎的原因 - 不同的引擎提供不同的優點和缺點。 InnoDB是一個偉大的引擎,它提供了引用完整性和事務安全性,但是對於網站使用情況來說,它沒有得到很好的優化,在這種情況下,您可以讀取更多的讀取次數。

MyISAM爲一個網站提供最好的性能,在這個網站上大多數點擊只需要讀取數據庫。在這種情況下,通常可以通過編寫數據插入和刪除來維護引用完整性,以便在損害完整性時無法成功。 例如,而不是寫

DELETE FROM mytable的WHERE ID = 5

你可以寫

DELETE FROM mytable的MYTABLE LEFT JOIN linkedtable ON mytable.id = linkedtable.ref WHERE ID = 5,linkedtable .ref IS NULL

只有在沒有外部引用時纔會成功刪除該行。