我即將開發基於PHP/MySQL的聊天系統。數據庫和網站都將在同一臺服務器上運行。我希望能夠同時在線支持300個用戶。這顯然會繼續產生大量的查詢。因此,優化數據庫設計是必須的。需要關於如何進一步優化數據庫的建議
我的MySQL技能是一般的。我盡我所能去學習優化,並盡我所能瞭解自己。但我不確定它是否足夠好。我希望你們可以看看它,並就如何進一步優化提供建議。
有關如何減少服務器負載的任何其他技巧也是受歡迎的。請記住,所有信息都必須根據當地法律予以保存。
CREATE TABLE IF NOT EXISTS `bans` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) NOT NULL,
`ipaddress` varchar(32) NOT NULL,
`reason` text,
`bandate` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `BAN_INDEX` (`userid`,`ipaddress`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `chatboxes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`boxname` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
`accesslvl` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `BOX_INDEX` (`boxname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `ignorelist` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) NOT NULL,
`blockedusr` varchar(16) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) NOT NULL,
`boxname` varchar(32) NOT NULL,
`message` text,
`receiver` varchar(16) NOT NULL,
`alert` tinyint(1) NOT NULL DEFAULT '0',
`msgdate` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(16) NOT NULL,
`password` varchar(32) NOT NULL,
`email` varchar(64) NOT NULL,
`gender` tinyint(1) NOT NULL DEFAULT '0',
`sexpref` tinyint(1) NOT NULL DEFAULT '0',
`birthdate` date DEFAULT NULL,
`regdate` datetime DEFAULT NULL,
`lastlogin` datetime DEFAULT NULL,
`warnings` tinyint(1) NOT NULL DEFAULT '0',
`accesslvl` tinyint(1) NOT NULL DEFAULT '1',
`kicks` tinyint(3) NOT NULL DEFAULT '0',
`ipaddress` varchar(32) NOT NULL,
`online` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `USER_INDEX` (`username`,`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
如果你downvote我的問題,請添加評論爲什麼我可以改善它。沒有反饋就無法學習。 – icecub
不幸的是,它通常不會以這種方式工作。爲了獲得關於SO下調的態度以及是什麼導致了一個很好的問題,請看看[post](http://meta.stackoverflow.com/questions/252677/when-is-it-justifiable-to -downvote-a-question)在meta stackoverflow上。 – mseifert