我有一张包含数千条记录的表格。我做了很多这样的选择,以确定一个人是否存在。
SELECT * from person WHERE personid='U244A902'
因为人员ID不是纯粹的数字,所以我没有将它用作主键并且使用自动增量。但现在我正在重新考虑我的策略,因为我觉得SELECTS
随着桌子填满而变得越来越慢。我认为这种缓慢背后的原因是因为personid
不是主键。
所以我的问题是,如果我要经历重组表的麻烦并使用personid
作为主键而没有自动增量,那么这会显着加快选择速度吗?我现在谈的是一张有200,000条记录的表格,完成后会填满约500万条。
答案 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子句的列或选择列