我正在使用 PHP 开发一个社交网络类型的网站,我之前做过一次,该网站超出了我的编码能力来跟上,这是几年前的事了,现在我想再次处理这个项目。
基本上在我的网络上有一个friend_friend mysql表,它跟踪谁是谁的朋友,对于每个确认的朋友,数据库中有2个条目是该表:
CREATE TABLE IF NOT EXISTS `friend_friend` (
`autoid` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(10) DEFAULT NULL,
`friendid` int(10) DEFAULT NULL,
`status` enum('1','0','3') NOT NULL DEFAULT '0',
`submit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`alert_message` enum('yes','no') NOT NULL DEFAULT 'yes',
PRIMARY KEY (`autoid`),
KEY `userid` (`userid`),
KEY `friendid` (`friendid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1657259 ;
然后我有一个包含所有用户信息的用户表,名为friend_reg_user
然后是用户发布的公告表,目的是仅显示与您成为朋友的用户的公告。这是公告表
CREATE TABLE IF NOT EXISTS `friend_bulletin` (
`auto_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(10) NOT NULL DEFAULT '0',
`bulletin` text NOT NULL,
`subject` varchar(255) NOT NULL DEFAULT '',
`color` varchar(6) NOT NULL DEFAULT '000000',
`submit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`status` enum('Active','In Active') NOT NULL DEFAULT 'Active',
`spam` enum('0','1') NOT NULL DEFAULT '1',
PRIMARY KEY (`auto_id`),
KEY `user_id` (`user_id`),
KEY `submit_date` (`submit_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=455144 ;
好的,为此我会在friend_friend表上运行查询以获取用户的所有朋友并将它们添加到像这样的字符串 1,2,3,4,5,6 那些将是朋友 ID 号的字符串,然后选择来自公告表,其中公告作者 ID 在我的朋友 ID 列表中
第二种方法是使用 JOINS 一次获取所有这些数据。
我现在的任务终于,一旦网站变得非常大,当数据库中有数百万的朋友记录和公告时,这一切都会变慢,我有什么选择来加快速度?有一个更好的方法吗?此外,我计划更改公告以包含更多内容,而不仅仅是公告,但会像现在的大型网站那样做更多的用户操作,因此它将显示状态更新、博客和公告等等