2013-08-26 56 views
4

我有三個表InnoDB,那三個有一些外鍵。在MySQL中加速插入

這是架構:

CREATE TABLE IF NOT EXISTS `tbl_member` (
    `id_member` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(80) COLLATE utf8_bin NOT NULL, 
    `lastname` varchar(80) COLLATE utf8_bin NOT NULL, 
    `username` varchar(40) COLLATE utf8_bin DEFAULT NULL, 
    `password` varchar(64) COLLATE utf8_bin NOT NULL, 
    `phone` varchar(20) COLLATE utf8_bin DEFAULT NULL, 
    `email` varchar(45) COLLATE utf8_bin DEFAULT NULL, 
    `status` enum('active','inactive') COLLATE utf8_bin NOT NULL DEFAULT 'active', 
    PRIMARY KEY (`id_member`), 
    KEY `username` (`username`,`password`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=107 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `tbl_notification` 
-- 

CREATE TABLE IF NOT EXISTS `tbl_notification` (
    `id_notification` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Notification ID', 
    `type` enum('notification','announcement') COLLATE utf8_bin NOT NULL DEFAULT 'notification', 
    `title` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'Title', 
    `notification` text COLLATE utf8_bin NOT NULL COMMENT 'Body', 
    `datestart` int(13) NOT NULL COMMENT 'Date when the notification will start to be deployed', 
    `dateend` int(13) NOT NULL, 
    PRIMARY KEY (`id_notification`), 
    KEY `datestart` (`datestart`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `tbl_notification_member` 
-- 

CREATE TABLE IF NOT EXISTS `tbl_notification_member` (
    `id_notification_member` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', 
    `id_notification` int(10) unsigned NOT NULL COMMENT 'Notification ID', 
    `id_member` int(10) unsigned NOT NULL COMMENT 'Member ID', 
    `status` enum('read','unread') NOT NULL DEFAULT 'unread' COMMENT 'Defines if the notification was viewed already or not', 
    `timestamp` int(15) NOT NULL COMMENT 'Time when the notification was saw', 
    PRIMARY KEY (`id_notification_member`), 
    KEY `id_notification` (`id_notification`), 
    KEY `id_member` (`id_member`), 
    KEY `timestamp` (`timestamp`), 
    KEY `status` (`status`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

-- 
-- Constraints for table `tbl_notification_member` 
-- 
ALTER TABLE `tbl_notification_member` 
    ADD CONSTRAINT `tbl_notification_member_ibfk_2` FOREIGN KEY (`id_member`) REFERENCES `tbl_member` (`id_member`), 
    ADD CONSTRAINT `tbl_notification_member_ibfk_3` FOREIGN KEY (`id_notification`) REFERENCES `tbl_notification` (`id_notification`) ON DELETE CASCADE; 

所以你可以看到,如果我刪除一個通知,通知和成員之間的關係將在級聯,這是真棒被刪除,但問題是當我試圖插入數千行。有沒有什麼辦法可以像級聯那樣做到這一點?使用索引或類似的東西? (我已刪除表格中的另一個關係,例如部分,因此您可以只爲一個部分添加通知並劃定將收到通知的用戶數量)

回答

3

您可以將其增加Innodb Performance Optimization Basics

還要檢查,如果您的應用程序可用於讀 - COMMITED隔離模式 運行 - 如果它 - 將其設置爲默認爲 事務隔離=讀取 - 提交。此選項具有一些性能 的好處,特別是在鎖定在5.0以及更多的時候可以使用 MySQL 5.1和行級複製。

另請檢查this

+0

不真的回答我的問題,但給了我一個線索搜索的地方。 – Cito

+0

我看不出爲什麼選擇這個答案作爲答案 –