【问题标题】:How to Avoid Complete Table Scan in Database?如何避免数据库中的完整表扫描?
【发布时间】:2012-10-07 06:45:58
【问题描述】:

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

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

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

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

【问题讨论】:

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

标签: mysql sql database select


【解决方案1】:

创建一个这样的架构,

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

pathTableuserid 指定为引用某个表的(dataTable) 主键的外键,服务器会自动为其编制索引,这将加快搜索速度。

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 2021-11-04
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      相关资源
      最近更新 更多