我正在將PHP應用程序從MSSQL服務器遷移到MySQL,並且我堅持使用MSSQL Server持續0.5秒和MySQL 50秒的簡單查詢。有任何想法嗎?指標?服務器配置? MySQL服務器硬件與MSSQL服務器相同或更好。與大表簡單連接的MySQL性能問題
表結構
兩者都是InnoDB的:
CREATE TABLE `tb1` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nec` INT(11),
`start_date` DATETIME(6) NOT NULL,
`end_date` DATETIME(6) NOT NULL,
PRIMARY KEY (`id`),
INDEX `IX_nec` (`nec`)
);
CREATE TABLE `tb2` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nec` INT(11) NOT NULL,
`start_date` DATETIME(6) NOT NULL,
`end_date` DATETIME(6) NOT NULL,
PRIMARY KEY (`id`),
INDEX `IX_nec` (`nec`)
);
表是大。 Tb1約有300.000行,tb2約有400.000。
選擇
SELECT count(1)
FROM tb2
LEFT JOIN tb1 ON tb1.nec = tb2.nec
結果是圍繞180.000.000。
這只是一個示例,最終目標是使用其他日期過濾器/交叉點等進行更大的查詢。
配置,硬件,...
@@ innodb_buffer_pool_size:2147483648
SELECT()版本:5.7.17-0ubuntu0.16.04.1
Profiling of the query(CSV文件)
Procedure Analyse()(XLS文件)
my.cnf
系統:
的VMware虛擬平臺
英特爾(R)至強(R)CPU E5530 @ 2.40GHz的
4GiB DIMM EDO DRAM
的Ubuntu 16.04.2 LTS(Linux的GT 4.4.0-66泛型x86_64的)
吊。。我知道想要得到一個更便宜或開放的數據庫,但這些日子是Postgresql,而不是MySql。自2004年以來,MySql並沒有跟上步伐,Sql Server,Oracle和Postgresql取得了進展。它不再是真正的現代數據庫引擎:沒有CTE(遞歸或其他),沒有窗口函數,沒有橫向連接/應用,沒有完全連接等等。 –
這可能是一個內存問題,用'SELECT @@ innodb_buffer_pool_size;'編輯你的問題,並添加解釋計劃 – Mihai
我敢打賭,如果你使用'INNER JOIN'而不是'LEFT JOIN',那麼會更快。你是否需要在'tb2'中統計'tb1'中沒有任何匹配的行? – Barmar