使用GUID与选择WHERE时选择更快?

时间:2012-09-03 13:47:56

标签: mysql database query-optimization

我有一张包含数千条记录的表格。我做了很多这样的选择,以确定一个人是否存在。

SELECT * from person WHERE personid='U244A902'

因为人员ID不是纯粹的数字,所以我没有将它用作主键并且使用自动增量。但现在我正在重新考虑我的策略,因为我觉得SELECTS随着桌子填满而变得越来越慢。我认为这种缓慢背后的原因是因为personid不是主键。

所以我的问题是,如果我要经历重组表的麻烦并使用personid作为主键而没有自动增量,那么这会显着加快选择速度吗?我现在谈的是一张有200,000条记录的表格,完成后会填满约500万条。

3 个答案:

答案 0 :(得分: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_column作为FOREIGN KEY并将其删除以支持personid,则需要修改所有其他表以供使用而是personid。这样做的难度可能不值得为你带来收益。

答案 1 :(得分:1)

您可以为personid创建索引。

CREATE INDEX id_index ON person(personidid)

答案 2 :(得分:1)

ALTER TABLE `person ` ADD INDEX `index1` (`personid`);

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