如何使用php处理大型mysql表以进行登录验证
我正在使用codeigniter框架进行一个项目。有不同类型的用户。现在我们有4种用户类型。我为每个用户使用不同的注册表,比如 注册\表格\用户\类型1 注册\表格\用户\类型2 注册\表格\用户\类型3 注册\表格\用户\类型4 但现在我使用的是一个带有用户名和密码输入字段的登录表单。我想创建一个用于登录身份验证的表。该表如下所示 登录表(用户名、密码、用户类型、注册id)如何使用php处理大型mysql表以进行登录验证,php,mysql,database,codeigniter,optimization,Php,Mysql,Database,Codeigniter,Optimization,我正在使用codeigniter框架进行一个项目。有不同类型的用户。现在我们有4种用户类型。我为每个用户使用不同的注册表,比如 注册\表格\用户\类型1 注册\表格\用户\类型2 注册\表格\用户\类型3 注册\表格\用户\类型4 但现在我使用的是一个带有用户名和密码输入字段的登录表单。我想创建一个用于登录身份验证的表。该表如下所示 登录表(用户名、密码、用户类型、注册id) 但我担心网站。因为不同类型的用户将超过1000000个。我如何编写mysql查询以更快地完成我的网站。我需要一些建议,请
但我担心网站。因为不同类型的用户将超过1000000个。我如何编写mysql查询以更快地完成我的网站。我需要一些建议,请帮助我。我建议首先尝试并规范您的数据库设计。有4个不同的表可能有相似的数据(类型除外),这似乎很奇怪。通常情况下,用户会有一个表(USER),在表中用户有一列表示类型本身或类型表的外键
通过使用单用户表,您就可以利用数据库优化(索引一个)并将开销降至最低。您的数据库模式未规范化,请将此模式与innoDB engine一起使用
CREATE TABLE `user_group` (
`id` tinyint NOT NULL AUTO_INCREMENT,
`label` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `user_account` (
`id` int NOT NULL AUTO_INCREMENT,
`gid` tinyint NOT NULL,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`gid`) REFERENCES user_group(`id`) ON DELETE RESTRICT ON UPDATE CASCADE
);
嗨,你知道谷歌的“数据库索引”吗;虽然每个用户类型使用不同的表是不好的设计,但用户只能使用一个
表
,用户类型使用一个列
,查看联合查询。因为您的数据被拆分为4个表,所以您所能做的可能很少(如果您的索引设置正确的话)这将加快数据检索。@Nes:CRON在这方面有什么帮助?非常感谢您的建议。您是对的。但我不能这样做。因为每个用户类型的注册表结构都不同。我正在为每个用户类型存储注册表中的不同值。我想您可以理解我要做的事情。您可以这样做也许使用sqlfiddle可以更好地向读者展示当前的设计,也许可以提供更好的设计谢谢。这很有帮助。从你的回答中,我得到了一些非常有用的想法。但是我为所有用户使用了一个全局登录表单,有两个输入字段,如用户名和密码。没有用于选择用户类型的字段。我不想这样做为选择用户类型提供任何选项。每个用户类型都有这么多用户。我如何编写查询以获得更快的结果?每个用户类型的注册表结构都不同。你能帮我吗?我对数据库不太在行。我想提高我的数据库知识。我怎样才能学好英语。请给我一些建议。