[英]'select * from ALargeTable' executes very slow in MySQL
我有一张“价格”表:
CREATE TABLE `prices` (
`dt` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`buy` double NOT NULL,
`sell` double NOT NULL,
PRIMARY KEY (`dt`),
UNIQUE KEY `idx_dt_buy_sell` (`dt`,`buy`,`sell`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
大约有 2200 万行。
一个简单的查询
select * from prices;
执行大约需要 1 分钟。
MySQL 1 分钟做什么? 它构建了哪些数据结构? 有没有办法优化这个?
例如查询
select * from prices limit 10;
在 0.00 秒后立即执行。
我玩了一些事务隔离级别,命令如下
set SESSION transaction isolation level Read committed;
SELECT @@transaction_ISOLATION;
但没有成功。
MySQL 版本是 5.7.30
怎么了 ? MYSQL 服务器正在从您的磁盘读取数据,并将其加载到内存中(如果它尚未在内存中)并将数据发送到 MYSQL 客户端,该客户端将其存储在内存中,然后再将其提示给用户(您)。
它构建了哪些数据结构? 我不知道,但我不确定这是否真的很重要。
有没有办法优化这个? 是的,读取更少的数据,或者检查您的配置和硬件,(如果您有并发问题,您可能需要更改引擎)。
limit 10
,查询运行速度很快,也许您不需要为每个查询返回 2200 万,您可以添加一个WHERE
子句。key_buffer_size
:如果还没有完成,请增加您的key_buffer_size
以匹配您的索引的大小,并一一尝试其他建议以查看如果任何或全部对您的表演产生影响附带说明一下,正如@Barmar 所指出的,您正在同时测试服务器和客户端,并且您没有说明两者是否在同一台服务器上运行。 您很可能是这样,因此您的 MYSQL 服务器和 MYSQL 客户端可能会消耗内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.