Re: How to reduce the query response time?

2004-12-08 Thread SGreen
note: this is this message's second sending after some snippage to meet 
the 3 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 
 

How to reduce the query response time?

2004-12-06 Thread chetan t
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)


these are my system variables.
mysql show variables;
+-+---+
| Variable_name   | Value 
   |
+-+---+
| back_log| 50
   |
| basedir | C:\mysql\ 
   |
| binlog_cache_size   | 32768 
   |
| bulk_insert_buffer_size | 8388608   
   |
| character_set_client| latin1
   |
| character_set_connection| latin1
   |
| character_set_database  | latin1
   |
| character_set_results   | latin1
   |
| character_set_server| latin1
   |
| character_set_system| utf8  
   |
| character_sets_dir  |
C:\mysql\share\charsets/  |
| collation_connection| latin1_swedish_ci 
   |
| collation_database  | latin1_swedish_ci 
   |
| collation_server| latin1_swedish_ci 
   |
| concurrent_insert   | ON
   |
| connect_timeout | 5 
   |
| datadir