[英]'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.