我正在一個具有110Mn +獨特記錄整天的mysql數據庫表上運行sql查詢。查詢龐大的數據庫表需要太多的時間在mysql
問題:每當我用「where」子句運行任何查詢時,至少需要30-40分鐘。由於我想在第二天生成大部分數據,因此我需要訪問整個數據庫表。
您能否指導我優化/重構部署模型?
網站描述:
mysql Ver 14.12 Distrib 5.0.24, for pc-linux-gnu (i686) using readline 5.0 4 GB RAM, Dual Core dual CPU 3GHz RHEL 3
my.cnf中的內容:
[mysqld] datadir=/data/mysql/data/ socket=/tmp/mysql.sock sort_buffer_size = 2000000 table_cache = 1024 key_buffer = 128M myisam_sort_buffer_size = 64M # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 [mysql.server] user=mysql basedir=/data/mysql/data/ [mysqld_safe] err-log=/data/mysql/data/mysqld.log pid-file=/data/mysql/data/mysqld.pid [[email protected] root]#
數據庫表的詳細信息:
CREATE TABLE `RAW_LOG_20100504` (
`DT` date default NULL,
`GATEWAY` varchar(15) default NULL,
`USER` bigint(12) default NULL,
`CACHE` varchar(12) default NULL,
`TIMESTAMP` varchar(30) default NULL,
`URL` varchar(60) default NULL,
`VERSION` varchar(6) default NULL,
`PROTOCOL` varchar(6) default NULL,
`WEB_STATUS` int(5) default NULL,
`BYTES_RETURNED` int(10) default NULL,
`RTT` int(5) default NULL,
`UA` varchar(100) default NULL,
`REQ_SIZE` int(6) default NULL,
`CONTENT_TYPE` varchar(50) default NULL,
`CUST_TYPE` int(1) default NULL,
`DEL_STATUS_DEVICE` int(1) default NULL,
`IP` varchar(16) default NULL,
`CP_FLAG` int(1) default NULL,
`USER_LOCATE` bigint(15) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 MAX_ROWS=200000000;
提前感謝! Regards,
您能否給我們提供一些您正在執行的示例選擇語句,這些語句顯得非常慢? – NebuSoft 2010-05-04 21:23:32
在WHERE子句中可以使用的表上是否有任何索引? – 2010-05-04 21:24:16
@ Nebusoft - Thnx for response select count(*),WEB_STATUS from $ table_name where CP_FLAG> 0 group by 2 order by 1 desc; @Martin:Thnx for response。我不知道如何把索引放在這個數據庫表上,因爲它不包含任何唯一的鍵。你覺得使用auto_increment幫助我嗎? – 2010-05-04 21:45:28