joe schrieb:
> U might want to try seting you index to calldate, disposition 

or calldate, day, disposition ...

and depending on your MySQL version:
(to circumvent possible limitations in InnoDB with your MySQL version)
you could try

WHERE calldate >= '2007-07-01 00:00:00'
  AND calldate <= '2007-07-30 23:59:59'

or

SELECT
    DATE_FORMAT(calldate, '%d') AS day,
    count(*) AS num,
    disposition
FROM (
 SELECT
   DATE_FORMAT(calldate, '%d') AS day,
   num,
   disposition
 FROM
   cdr
 WHERE
   calldate BETWEEN '2007-07-01 00:00:00' AND '2007-07-30 23:59:59'
)
GROUP BY day, disposition;


> 
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
> Sent: Sunday, November 25, 2007 10:03 PM
> To: Edoardo Serra
> Cc: mysql@lists.mysql.com
> Subject: Re: MyISAM vs InnoDB - Index choice and Huge performance difference
> 
> just want to take a note on 4Gbytes
> 
> What kernel u use?
> 4Gbytes or bigger means nothing on your MySQL, because if your kernel is not
> compiled using correct patch or simply use CentOS/RHEL, then your MySQl will
> limited to use up to 2Gbytes only, so 4Gbytes --> 2Gbytes.... is useless
> 
> 
> On 11/25/07, Edoardo Serra <[EMAIL PROTECTED]> wrote:
>> Hi everybody,
>>      I have a MySQL database with MyISAM tables.
>>
>> As we're experiencing a lot of locking-related problems I decided to 
>> migrate to InnoDB.
>>
>> Our database is composed by a lot of small tables (1.000 - 10.000 
>> rows) and a huge table containing 7.000.000 rows, this big table is a 
>> sort of a log of our subscriber's phone calls.
>>
>> I have a query I often run on the big table that is performing really 
>> poorly on InnoDB (18mins Innodb vs 29secs MyISAM)
>>
>> This is my query
>>
>> SELECT
>>      DATE_FORMAT(calldate, '%d') AS day,
>>      count(*) AS num,
>>      disposition
>> FROM cdr
>> WHERE calldate BETWEEN '2007-07-01 00:00:00' AND '2007-07-30 23:59:59'
>> GROUP BY day, disposition;
>>
>> Using EXPLAIN I see that the query on the InnoDB table isn't using 
>> indexes at all but the one on MyISAM table (same structure, same 
>> indexes, same data) is choosing the correct index.
>>
>> Here are my EXPLAIN results
>>
>> MyISAM:
>>             id: 1
>>    select_type: SIMPLE
>>          table: cdr
>>           type: range
>> possible_keys: calldate,date-context-cause
>>            key: calldate
>>        key_len: 8
>>            ref: NULL
>>           rows: 697688
>>          Extra: Using where; Using temporary; Using filesort
>>
>> Innodb:
>>             id: 1
>>    select_type: SIMPLE
>>          table: cdr_innodb
>>           type: ALL
>> possible_keys: calldate,date-context-cause
>>            key: NULL
>>        key_len: NULL
>>            ref: NULL
>>           rows: 5035407
>>          Extra: Using where; Using temporary; Using filesort
>>
>> As you can see, Innodb doesn't use the calldate index (which seems to 
>> me the correct choice)
>>
>> Probably I can solve this query performance problem with an index on 
>> calldate, disposition but I'd like to understand deeper the causes of 
>> that to avoide re-analizing every query ad retry to optimize it as I 
>> did with MyISAM.
>>
>> I have got a Xeon quad core with SAS disks and 4 GB of RAM I'm using a 
>> config file taken from MySQL sources optimized for innodb and 4G RAM 
>> (my-innodb-heavy-4G.cnf)
>>
>> I followed some simple optimization rules as putting InnoDB data dir 
>> on a different array of disks on a different channel, etc...
>>
>> Im using MySQL 5.0.32 on a Debian stable.
>>
>> Tnx in advance for help
>>
>> Regards
>>
>> Edoardo Serra
>> WeBRainstorm S.r.l.
>>
>> --
>> MySQL General Mailing List
>> For list archives: http://lists.mysql.com/mysql To unsubscribe:
>> http://lists.mysql.com/[EMAIL PROTECTED]
>>
>>
> 
> 


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to