多个同时从mysql数据库表中选择

时间:2016-10-26 23:23:09

标签: mysql sql database

我正在开发一个拥有一个包含2100万条记录的表的数据库。创建数据库并且不再有插入,更新或删除操作时,将加载一次数据。 Web应用程序访问数据库以生成select语句。

每个请求服务器目前需要25秒才能收到响应。但是,如果多个客户端同时发出请求,则响应时间会显着增加。有没有办法加速这个过程?

我正在使用MyISAM而不是具有固定最大行的InnoDB,并根据搜索的字段编制索引。

1 个答案:

答案 0 :(得分:0)

如果没有更新/插入/删除数据,那么您可能希望告诉数据库在您阅读时不要锁定该表。

对于MYSQL,这似乎是:

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;

(参考:http://itecsoftware.com/with-nolock-table-hint-equivalent-for-mysql

更多阅读文档,如果它有帮助:

https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html

如果你需要进一步谷歌,可能有用的TSQL等价物是

SELECT * FROM TABLE WITH (nolock)

这可以提高性能。正如其他评论中所指出的那样,一些好的索引可能会有所帮助,并且可能会进一步打破表格(如果可能的话)以扩展内容,以便在不需要时不访问所有数据。

作为一个说明;锁定表会阻止其他人在您使用它时更改数据。不锁定具有大量插入/删除/更新的表可能会导致您的选择返回相同数据的多行(因为它在硬盘上移动),缺少列的行等等。

由于你有一个表,你选择反对你的请求都是轮流锁定和解锁表。如果您没有进行更新,插入或删除,那么您的数据不应该更改,因此您可以放弃锁定。