我目前正在研究一個財務應用程序。具有8列的MYSQL數據庫。 1百萬條記錄。MySql - 進一步查詢優化SELECT Where Where
插入:每分鐘30行。
更新:0
選擇:查詢 每200毫秒運行一次。每次執行返回大約200,000條記錄 。
選擇查詢,如下所示:是
SELECT COLUMNB, COLUMNC, COLUMND, COLUMNE FROM TABLE
WHERE COLUMNE IN('ABCD','EFGH','IJKL','MNOP')
ORDER BY COLUMNB DESC
我的響應時間如下:執行:0.903秒抓取:0.2秒。
總計〜1.1秒
當我做一個解釋,我得到以下幾點:
ID,SELECT_TYPE,表,分區類型,possible_keys,鑰匙,key_len 'tbl_ColumnE_ColumnB,tbl_ColumnE',NULL,NULL, NULL,'1180834','34 .33',' ref,rows,filtered,Extra'1','SIMPLE','table',NULL,'ALL'運用哪裏;使用文件排序」
指標已處於活動狀態:
- tbl_ColumnE_ColumnB,
- tbl_ColumnB_ColumnE,
- tbl_ColumnE
- tbl_ColumnB
由於這是一個金融股市基地d應用程序。我需要將總執行時間進一步縮短到接近200毫秒或更少。有什麼我可以改進的?
已經完成:從8M
- innodb_buffer_pool增加到2000M(節省30%)
- 改變或運營商IN操作符(這是或之前節省了20%。)
顯示創建表格:
CREATE TABLE `tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`COLUMNB` timestamp NULL DEFAULT NULL,
`COLUMNC` decimal(20,10) DEFAULT NULL,
`COLUMND` decimal(20,10) DEFAULT NULL,
`COLUMNX` decimal(20,10) DEFAULT NULL,
`COLUMNY` decimal(20,10) DEFAULT NULL,
`COLUMNZ` decimal(20,10) DEFAULT NULL,
`COLUMNE` varchar(45) DEFAULT NULL,
`COLUMNF` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `tbl_ColumnE_ColumnB` (`ColumnE`,`ColumnB`),
KEY `tbl_ColumnB_ColumnE` (`ColumnB`,`ColumnE`),
KEY `tbl_ColumnB` (`ColumnB`),
KEY `tbl_ColumnE` (`ColumnE`)
) ENGINE=InnoDB AUTO_INCREMENT=1718507 DEFAULT CHARSET=utf8'
查詢不使用索引:您必須在兩個字段(COLUMNE,COLUMNB)上創建一個複合索引,然後再次發送解釋 –
@BerndBuffen已經有了! – Metaplace
您的訂單條款是否必要? – sagi