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

Mysql 如何避免数据库中的完全表扫描?,mysql,sql,database,select,Mysql,Sql,Database,Select,我想创建一个网站,用户可以在网站上注册,并上传20张图片到他们的帐户。计划允许用户在将来上传无限量的图像 数据库中有两个表。 一个用于保存用户数据的 表名-成员 字段-用户ID、用户名、密码、电子邮件。 用于保存图像路径的其他 表名-图像 字段-用户标识,图像路径 因此,我可以在页面中显示用户的图像,从表“images”中搜索图像路径 事情进展顺利。但如果用户数量增加,这将变得更慢。 例如,如果有50000个用户,我应该检查所有行以查找单个用户上传的图像 ie; 50000个用户ID*20个图像

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

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

因此,我可以在页面中显示用户的图像,从表“images”中搜索图像路径

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

在第二个表中的userid字段上创建索引。 语法:


在第二个表中的userid字段上创建索引。 语法:


创建这样的模式

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`)
);

将pathTable的用户ID指定为外键,该外键引用特定表的dataTable主键,服务器会自动为其编制索引,这将加快搜索速度。

创建这样的架构

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`)
);

将pathTable的用户ID指定为外键,该外键引用特定表的dataTable主键,服务器会自动为其编制索引,从而加快搜索速度。

您需要使用索引。如何设计它们取决于您的数据库结构。嗯。。。我听说过数据库索引,但不知道如何使用它。你能提供一个很好的教程链接吗?你需要使用索引。如何设计它们取决于您的数据库结构。嗯。。。我听说过数据库索引,但不知道如何使用它。你能给我一个很好的教程链接吗?