create table foo (id int(11) auto_increment, value varchar(255))
该表包含大约 10,00,000 行,并且选择操作(例如 select id、来自 foo 的值)大约需要 2-3 秒才能执行,我该如何提高这里的速度
select id, value from foo 将返回整个表。您提到的 2-3 秒可能包括传输结果所需的时间。这通常比数据库服务器执行实际查询花费的时间要长得多。
如果没有 WHERE 子句(如您发布的查询)并且您正在选择一百万行,那么很有可能不是查询需要 2-3 秒来执行它实际上是花时间来发送数据网络。
您的应用程序实际上可以一次使用一百万条数据库记录吗?如果您向用户显示该数据,那么您可能会对其进行分页,因此请更改您的查询以选择更易于管理的块中的数据。
SELECT id, value
FROM foo
LIMIT $offset, $pgsize -- these two values will come from your application
如果您真的,真的需要一次所有这些行,那么我建议您缓存它们。
为 where 子句中使用的字段添加索引。
CREATE INDEX id_index ON foo (id) USING BTREE;
您可以在http://dev.mysql.com/doc/refman/5.0/en/create-index.html看到更多信息