2013-08-26 2 views
4

3 개의 테이블 InnoDB가 있습니다.이 테이블에는 3 개의 외래 키가 있습니다. 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

응용 프로그램이 READ-최선을 다하고 격리 모드 에서 실행할 수 있는지

또한 확인 - 그것은 않을 경우 - 그것은 트랜잭션 격리 = 읽기 최선을 다하고 기본값으로 설정합니다. 이 옵션은 특히 성능이 이고, 특히 5.0에서 락킹하고, 더 많은 것들이 MySQL 5.1과 행 수준 복제와 함께 제공됩니다.

this도 확인하십시오.

+0

정말 내 질문에 대답하지 않지만 검색 할 위치를 알려줍니다. – Cito

+0

이것이 답변으로 선택된 이유를 볼 수 없습니다. –

관련 문제