优化MySQL触发器性能
我有以下表格结构。添加了两个触发器,但是由于触发器使用字符串值,并且它们搜索字符串,所以将来当每个表都变得巨大时,数据库性能可能会降低。我没有索引方面的丰富经验,也不知道索引哪些字段可以使触发器的搜索操作快速,即使有数百万行 你有什么建议优化MySQL触发器性能,mysql,sql,triggers,sql-update,sql-insert,Mysql,Sql,Triggers,Sql Update,Sql Insert,我有以下表格结构。添加了两个触发器,但是由于触发器使用字符串值,并且它们搜索字符串,所以将来当每个表都变得巨大时,数据库性能可能会降低。我没有索引方面的丰富经验,也不知道索引哪些字段可以使触发器的搜索操作快速,即使有数百万行 你有什么建议 CREATE TABLE `ofRoster` ( `rosterID` bigint(20) NOT NULL, `username` varchar(64) NOT NULL, `jid` varchar(1024
CREATE TABLE `ofRoster` (
`rosterID` bigint(20) NOT NULL,
`username` varchar(64) NOT NULL,
`jid` varchar(1024) NOT NULL,
`sub` tinyint(4) NOT NULL,
`ask` tinyint(4) NOT NULL,
`recv` tinyint(4) NOT NULL,
`nick` varchar(255) DEFAULT NULL,
PRIMARY KEY (`rosterID`),
KEY `ofRoster_unameid_idx` (`username`),
KEY `ofRoster_jid_idx` (`jid`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ofUser` (
`username` varchar(64) NOT NULL,
`plainPassword` varchar(32) DEFAULT NULL,
`encryptedPassword` varchar(255) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`creationDate` char(15) NOT NULL,
`modificationDate` char(15) NOT NULL,
PRIMARY KEY (`username`),
KEY `ofUser_cDate_idx` (`creationDate`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
delimiter ;;
CREATE TRIGGER `UpdateNickOnInsert` BEFORE INSERT ON `ofRoster` FOR EACH ROW BEGIN
SET NEW.nick=(SELECT name FROM ofUser where username=NEW.username);
END
;;
delimiter ;
delimiter ;;
CREATE TRIGGER `UpdateRosterNicksOnUpdate` AFTER UPDATE ON `ofUser` FOR EACH ROW BEGIN
IF NEW.name <> OLD.name
THEN
UPDATE ofRoster r SET r.nick=NEW.name WHERE r.username=OLD.username;
END IF;
END
;;
delimiter ;
对于第二种情况,您最好使用级联外键约束;但是为什么要冗余地存储字符串数据呢?一个简单的用户id会更有效率。@uuerdo它是一个随时可用的软件数据库。Openfire服务器。这不是我的错。考虑到您当前的索引和触发器中的查询,我看不出有多少可以真正改进的地方;WHERE's中使用的字段已具有适当的索引。为什么要使用触发器更新这些字段?只要在需要信息时使用连接即可。不要存储重复的信息。@GordonLinoff软件数据库已准备就绪。Openfire服务器。数据库设计不是我的错。对于第二种情况,您最好使用级联外键约束;但是为什么要冗余地存储字符串数据呢?一个简单的用户id会更有效率。@uuerdo它是一个随时可用的软件数据库。Openfire服务器。这不是我的错。考虑到您当前的索引和触发器中的查询,我看不出有多少可以真正改进的地方;WHERE's中使用的字段已具有适当的索引。为什么要使用触发器更新这些字段?只要在需要信息时使用连接即可。不要存储重复的信息。@GordonLinoff软件数据库已准备就绪。Openfire服务器。数据库设计不是我的错。