如何避免数据库中的完整表扫描?

时间:2012-10-07 06:45:58

标签: mysql sql database select

我想创建一个网站,用户可以在网站上注册并将20张图片上传到他们的帐户。 (计划允许用户以后上传无限图片)

我在数据库中有两个表。 一个用于保存用户数据 表名 - 成员 字段 - 用户ID,用户名,密码,电子邮件。 其他用于保存图像路径 表名 - 图像 字段 - userid,imagepath

因此,我可以在表格'images'

的页面搜索图像路径中显示用户的图像

事情进展顺利。但如果用户数量增长,这将变得更慢。 例如 - 如果有50000个用户,我应检查所有行以查找由单个用户上传的图像 即; 50000用户ID * 20图像/用户= 1000000扫描表行 这将使系统变慢并使过载。 我该怎么做才能避免这种情况?

2 个答案:

答案 0 :(得分:3)

创建一个这样的Schema,

CREATE TABLE dataTable
(
    `userid` INT NOT NULL, 
    `username` VARCHAR(50) NOT NULL, 
    `password` VARCHAR(50) NOT NULL, 
    `email` VARCHAR(50) NOT NULL
    CONSTRAINT tb_pk PRIMARY (`userID`),
    CONSTRAINT tb1_uq UNIQUE (`username`)
);

CREATE TABLE pathTable
(
    `userid` INT NOT NULL, 
    `imagepath` VARCHAR(50) NOT NULL, 
    CONSTRAINT tb_fk FOREIGN KEY  (`userID`) REFERENCES dataTable(`userid`)
);

userid pathTable指定为引用某个表( dataTable )主键的外键,服务器自动将其编入索引,这样可以加快搜索速度

答案 1 :(得分:1)