2

方案 1

我有一张桌子可以说“成员”。在该表“成员”中,我有 7 个字段(memid、login_name、密码、年龄、城市、电话、国家/地区)。在我的表中,我有 10K 条记录。我需要获取一条记录。所以我正在使用这样的查询

mysql_query("select * from member where memid=999");

方案 2

我有同一张表,称为“成员”,但我像这个成员和 member_txt 一样拆分表。所以在我的 member_txt 表中,我有 memid,age,phone,city,country ),在我的成员表中,我有 memid,login_name,密码 。

哪个是快速获取数据的最佳方案?是去单个表还是参考将表分成两个?

注意:我需要获取 PHP 和 MYSQL 中的特定数据。请让我知道哪种方法最好遵循。我们有 10K 条记录

4

3 回答 3

2

为了您自己的健康,请使用单表方法。

只要您使用主键memid,事情就会变得快如闪电。这是因为PRIMARY KEY自动分配了一个索引,它基本上告诉了数据的确切位置,并消除了遍历数据的需要,否则它会这样做。

来自http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

索引用于快速查找具有特定列值的行。如果没有索引,MySQL 必须从第一行开始,然后读取整个表以查找相关行。桌子越大,成本越高。如果表有相关列的索引,MySQL 可以快速确定要在数据文件中间查找的位置,而无需查看所有数据。如果一个表有 1,000 行,这至少比顺序读取快 100 倍。如果您需要访问大部分行,顺序读取会更快,因为这样可以最大限度地减少磁盘寻道。

您的第二种方法只会使您的系统更复杂,并且没有任何好处。

使用场景 1。

于 2012-05-25T06:00:57.930 回答
0

请设置 memid 主键/唯一键,然后拥有一张桌子比拥有两张桌子要快。

于 2012-05-25T05:52:42.350 回答
0

一般来说,只要您通过主键访问它,您应该不会看到 10k 行对性能有太大影响。

另请注意,从一张表中提取数据也比从两张表中提取数据要快。

如果要进一步优化,请使用 select 语句中的列名而不是 * 运算符。

于 2012-05-25T05:54:42.177 回答