首頁>Program>source

我是一名科學家,我將MySQL用作數值模擬結果的儲存庫.通常,我有一組通過實驗获得的資料和一个對照組.這两个資料集儲存在一个表中.一个指示符欄位告诉我記錄是来自實驗還是来自控制元件集.该表通常具有約1亿條記錄. 5000万次實驗和5000万个控制元件.

当我對資料进行後處理時,我的典型任務是首先發出以下两个查詢:

select b0,t0 from results_1mregr_c_ew_f where RC='E' and df>60  /// getting experiments data

select b0,t0 from results_1mregr_c_ew_f where RC='C' and df>60 /// getting controls data

我在RC,df上有一个多列索引。 這些查詢会花费大量時間,而查詢会花费大部分時間来"發送資料"

我正在具有12GB RAM的8core MacPro上執行此程式。 我是這台機器的一个使用者,此任務是主要任務,因此我可以將所有RAM专用於MySQL.所有表都是MyISAM(如果可以提高查詢速度,我可以轉換它们)。

對於如何加快這些查詢的任何建議,我將不胜感激。 我應该更改一些設置,索引,查詢吗?...

In each of these queries I expect to get back ~ 50 million records. 請註意,由於管理原因,不能將表格分為两个表格,一个表格包含實驗,一个表格包含對照观察.

以下是輸出:

explain select b0, t0 from results_1mregr_c_ew_f  where RC="C" and df>60
+----+-----------+---------------------+-----+-------------+---+-------+----+-------+-----------+
| id |select_type|table                |type |possible_keys|key|key_len|ref |rows   |Extra      |
+----+-----------+---------------------+-----+-------------+---+-------+----+-------+-----------+
|  1 |SIMPLE     |results_1mregr_c_ew_f|range|ff           |ff |11     |NULL|6251121|Using where|
+----+-----------+---------------------+-----+-------------+---+-------+----+-------+-----------+

以下是輸出:

show indexes from results_1mregr_c_ew_f;
+-----------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table                 | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| results_1mregr_c_ew_f |          0 | PRIMARY  |            1 | id          | A         |    50793996 |     NULL | NULL   |      | BTREE      |         |
| results_1mregr_c_ew_f |          1 | ff       |            1 | RC          | A         |           3 |     NULL | NULL   |      | BTREE      |         |
| results_1mregr_c_ew_f |          1 | ff       |            2 | df          | A         |         120 |     NULL | NULL   |      | BTREE      |         |
+-----------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

以下是輸出:

CREATE TABLE `results_1mregr_c_ew_f` (
  `b0` double NOT NULL COMMENT '    ',
  `s0` double NOT NULL,
  `t0` double NOT NULL,
  `b1` double NOT NULL,
  `s1` double NOT NULL,
  `t1` double NOT NULL,
  `b2` double NOT NULL,
  `s2` double NOT NULL,
  `t2` double NOT NULL,
  `b3` double NOT NULL,
  `s3` double NOT NULL,
  `t3` double NOT NULL,
  `b4` double NOT NULL,
  `s4` double NOT NULL,
  `t4` double NOT NULL,
  `AD` char(4) NOT NULL,
  `chisq` double NOT NULL,
  `RC` char(7) NOT NULL,
  `colq` varchar(255) NOT NULL,
  `df` int(11) NOT NULL,
  `ncol` int(11) NOT NULL,
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `p1` float NOT NULL,
  `p2` float NOT NULL,
  `p3` float NOT NULL,
  `p4` float NOT NULL,
  PRIMARY KEY (`id`),
  KEY `ff` (`RC`,`df`)
) ENGINE=MyISAM AUTO_INCREMENT=50793997 DEFAULT CHARSET=ascii |
最新回復
  • 5月前
    1 #

    当我可以在60秒內用類似的硬體完成相同的事情時,您的查詢要花2个小時才能執行,因此必须非常錯誤。

    以下某些內容可能会有所帮助...

    為您的引擎調整MySQL

    檢查服務器配置並进行相應的優化.以下一些資源應该是有用的。

      http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/

      http://www.mysqlperformanceblog.com/

      http://www.highperfmysql.com/

      http://forge.mysql.com/wiki/ServerVariables

      http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html

      http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/

      http://jpipes.com/presentations/perf_tuning_best_practices.pdf

      http://jpipes.com/presentations/index_coding_optimization.pdf

      http://www.jasny.net/?p=36

相似問題

  • hadoop:如何通過Spark打開/流zip檔案?
  • iphone:如何以程式設計方式將圖像裁剪成碎片