<note: this is this message's second sending after some snippage to meet the 30000 character limit for the list and other mild editing.-- SG>
This is the query you would like to optimize: select Sum(m0),Avg(m1),Max(m5),Min(m6) from ind_kar_bng_robocop_bsc_0_pm_ipc_0 where bsc_id = 0 and bts_id = 255 and data_Gentime between "2004-11-22 00:00:00" and "2004-12-10 19:41:44" and item_id = 0; If you frequently query on bsc_id, bts_id, item_id, and data_Gentime (which may be a reasonable combination of values to frequently search by) you can usually improve query responses by creating a compound index that contains all of those columns because MySQL does not *yet* combine single-column indexes to improve performance (it's a 5.2+ optimization and is still in the works) ALTER TABLE ind_kar_bng_robocop_bsc_0_pm_ipc_0 ADD KEY(data_Gentime, item_id, bts_id, bsc_id) That index should also improve any using any of these combinations of fields in the WHERE statement: date_Gentime (alone) data_Gentime, item_id data_Gentime, item_id, bts_id But that index could not assist for queries only looking for: item_id, bts_id, bsc_id bts_id, bsc_id bsc_id data_Gentime, bts_id, bsc_id data_Gentime, bsc_id data_Gentime, bts_id That is because the index can only assist to locate values where you query the index from left to right. If you skip an indexed column then a compound index may become unuseful. If your query patterns are slightly different, you may want to try a different order to the columns or to try creating multiple compound indexes, each one with a slightly different column composition and order. Additional reading (also available in other languages!): http://dev.mysql.com/doc/mysql/en/EXPLAIN.html http://dev.mysql.com/doc/mysql/en/SELECT_speed.html http://dev.mysql.com/doc/mysql/en/Where_optimizations.html Shawn Green Database Administrator Unimin Corporation - Spruce Pine chetan t <[EMAIL PROTECTED]> wrote on 12/07/2004 12:07:39 AM: > Hello, > > > I am a software developer, > I am using Mysql-4.1.3b-beta-nt, > ODBC3.5.1 driver on windows PC for an > application development. > > the application which i am developing is a > client-server architecture based,in which we have to > store data of the BSM(Base Station Manager of CDMA > network). > the nature of data is records containing alarms and > faults > occuring in the CDMA system,after storing the data we > need to generate statistical reports on these data > > my table structure is as fallows, > > CREATE TABLE ind_kar_bng_robocop_bsc_0_pm_ipc_0 > ( > gan_id INTEGER NOT NULL, > bsc_id INTEGER NOT NULL, > bts_id INTEGER NOT NULL, > bd_type VARCHAR(10) NOT NULL, > bd_id INTEGER NOT NULL, > duplex VARCHAR(10) NOT NULL, > data_GenTime DATETIME NOT NULL, > item_id INTEGER NOT NULL, > M0 INTEGER NOT NULL, > M1 INTEGER NOT NULL, > M2 INTEGER NOT NULL, > M3 INTEGER NOT NULL, > M4 INTEGER NOT NULL, > M5 INTEGER NOT NULL, > M6 INTEGER NOT NULL, > M7 INTEGER NOT NULL, > M8 INTEGER NOT NULL, > M9 INTEGER NOT NULL, > M10 INTEGER NOT NULL, > M11 INTEGER NOT NULL, > M12 INTEGER NOT NULL, > M13 INTEGER NOT NULL, > M14 INTEGER NOT NULL, > M15 INTEGER NOT NULL, > M16 INTEGER NOT NULL, > M17 INTEGER NOT NULL, > M18 INTEGER NOT NULL, > M19 INTEGER NOT NULL, > M20 INTEGER NOT NULL, > M21 INTEGER NOT NULL, > M22 INTEGER NOT NULL, > M23 INTEGER NOT NULL, > M24 INTEGER NOT NULL, > M25 INTEGER NOT NULL, > M26 INTEGER NOT NULL, > M27 INTEGER NOT NULL, > M28 INTEGER NOT NULL, > M29 INTEGER NOT NULL, > M30 INTEGER NOT NULL, > M31 INTEGER NOT NULL, > KEY DateIndex (data_GenTime), > KEY gan_idIndex (gan_id) , > KEY bsc_idIndex (bsc_id) , > KEY bts_idIndex (bts_id) , > KEY bd_typeIndex (bd_type) , > KEY bd_idIndex (bd_id) , > KEY item_idIndex (item_id)); > > > the type of query that is executed is as below > > > mysql> select Sum(m0),Avg(m1),Max(m5),Min(m6) from > ind_kar_bng_robocop_bsc_0_pm_ipc_0 where > bsc_id = 0 and bts_id = 255 and data_Gentime > between "2004-11-22 00:00:00" and > "2004-12-10 19:41:44" and item_id = 0; > +----------+-----------+---------+---------+ > | Sum(m0) | Avg(m1) | Max(m5) | Min(m6) | > +----------+-----------+---------+---------+ > | 23376896 | 1154.9079 | 0 | 0 | > +----------+-----------+---------+---------+ > > 1 row in set (3 min 30.35 sec) > > > this query executed when the record count in the table > ind_kar_bng_robocop_bsc_0_pm_ipc_0 was 79,21,988 > records > > mysql> select count(*) from > ind_kar_bng_robocop_bsc_0_pm_ipc_0; > +----------+ > | count(*) | > +----------+ > | 7921988 | > +----------+ > > as the number of record in the table keep on growing > the > query response time increases.. > > the explain select result of the same query is here > > mysql> explain select Sum(m0),Avg(m1),Max(m5),Min(m6) > from ind_kar_bng_robocop_bsc_0_pm_ipc_0 where > bsc_id = 0 and bts_id = 255 and data_Gentime > between "2004-11-22 00:00:00" and > "2004-12-10 19:41:44" and item_id = 0 \G > *************************** 1. row > *************************** > id: 1 > select_type: SIMPLE > table: ind_kar_bng_robocop_bsc_0_pm_ipc_0 > type: ref > possible_keys: > DateIndex,bsc_idIndex,bts_idIndex,item_idIndex > key: item_idIndex > key_len: 4 > ref: const > rows: 820535 > Extra: Using where > 1 row in set (0.28 sec) > <<<<huge snip>>> > Please sujjest a way to reduce query response time to > few seconds > either by altering system variables or by any other > method possible > > thanks in advance, > waiting for the reply, > Chethan. > > > > __________________________________ > Do you Yahoo!? > Meet the all-new My Yahoo! - Try it today! > http://my.yahoo.com > > > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] >