On Thu, Apr 24, 2008 at 6:40 AM, Krishna Chandra Prajapati
<[EMAIL PROTECTED]> wrote:
> Hi All,
>
>  Below is the table design on mysql server.
>
>  CREATE TABLE `coupon_per_course` (
>   `coupon_id` int(10) unsigned NOT NULL default '0',
>   `course_id` int(10) unsigned NOT NULL default '0',
>   PRIMARY KEY  (`coupon_id`,`course_id`),
>   KEY `idx_coupon_per_course` (`coupon_id`),
>   KEY `idx_coupon_per_course_1` (`course_id`)
>  ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
>
>  In my view index idx_coupon_per_course should not be there. Since coupon_id
>  is a primary key. so it will be utilized for searching.
>
>  Before removing index idx_coupon_per_course
>  mysql> do benchmark(1000000,(select sql_no_cache ac.plan from
>  affiliate_coupon ac, coupon_per_course cpc  where ac.coupon_code='TST0G0'
>  and ac.coupon_id = cpc.coupon_id and  cpc.course_id = 213336));
>  Query OK, 0 rows affected (0.06 sec)
>
>
>  After removing index idx_coupon_per_course
>  mysql> do benchmark(1000000,(select sql_no_cache ac.plan from
>  affiliate_coupon ac, coupon_per_course cpc  where ac.coupon_code='TST0G0'
>  and ac.coupon_id = cpc.coupon_id and  cpc.course_id = 213336));
>  Query OK, 0 rows affected (0.07 sec)
>
>  I am not able to understand why after removing the index
>  idx_coupon_per_course, it is taking more time. As it must take less time.
>
>  Some other statistics are
>  mysql> select count(*) from coupon_per_course;
>  +----------+
>  | count(*) |
>  +----------+
>  |   296218 |
>  +----------+
>  mysql> select count(distinct coupon_id) from coupon_per_course;
>  +---------------------------+
>  | count(distinct coupon_id) |
>  +---------------------------+
>  |                    211519 |
>  +---------------------------+
>
>  Please suggest me the correct table design.
>  Thanks in advance.
>
>  Thanks,
>  --
>  Krishna Chandra Prajapati
>
Hi Krishna,
I have run into similar issues in the past and have ended up having
duplicative indexes. The multi column indexes have higher cardinality
and although it should not be an issue, lookup on the first portion of
the index alone is not as efficient.  I would love to know why this
is/what I am dong wrong.

Are you having issues with INSERT speed, or the size of the your indexes?

Posting your explain (extended) and show index may be helpful.

For whatever it is worth, I always suggest explicit joins and using AS:
SELECT  sql_no_cache ac.plan
FROM    coupon_per_course AS cpc
        INNER JOIN affiliate_coupon AS ac USING(coupon_id)
WHERE   cpc.course_id = 213336
        AND ac.coupon_code='TST0G0'

I think it makes queries much easier to read and understand.

-- 
Rob Wultsch
[EMAIL PROTECTED]
wultsch (aim)

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

Reply via email to