2

我有一张包含数千条记录的表。我做了很多这样的选择来查找一个人是否存在。

SELECT * from person WHERE personid='U244A902'

因为个人ID不是纯数字,所以我没有使用它作为主键并使用自增。但现在我正在重新考虑我的策略,因为我认为SELECTS随着桌子填满,我的速度会越来越慢。我在想这种缓慢背后的原因是因为personid不是主键。

所以我的问题是,如果我要通过重组表的麻烦并使用personid作为主键而不是自动增量,那会显着加快选择速度吗?我说的是现在有 200,000 条记录的表,完成后将填充约 500 万条记录。

4

3 回答 3

2

缓慢是间接由于它不是主键这一事实,personid因为它没有被索引,因为它没有被定义为键。最快的解决方法是简单地索引它:

CREATE UNIQUE INDEX `idx_personid` ON `person` (`personid`);

但是,如果它是唯一值,它应该是表的主键。没有真正需要单独的auto_increment密钥。

ALTER TABLE person DROP the_auto_increment_column;
ALTER TABLE person ADD PRIMARY KEY personid;

但是请注意,如果您还在其他表中使用the_auto_increment_columnas aFOREIGN KEY并将其删除以支持personid,则需要修改所有其他表以改为使用personid。这样做的困难可能并不完全值得你获得。

于 2012-09-03T13:49:54.820 回答
1

您可以为 personid 创建一个索引。

CREATE INDEX id_index ON person(personidid)
于 2012-09-03T13:50:53.733 回答
1
ALTER TABLE `person ` ADD INDEX `index1` (`personid`);

尝试索引您正在使用 where 子句的列或选择列

于 2012-09-03T13:50:59.967 回答