Sebastian Mendel <[EMAIL PROTECTED]> writes:

> Changying Li schrieb:
>> Hi. there is a table photo and two queries:
>> mysql> show index from photo;                                                
>>                                                                              
>>    mysql> show index from photo;                                             
>>                                                                              
>>       
>> +-------+------------+--------------------+--------------+--------------------+-----------+-------------+----------+--------+------+------------+---------+
>> | Table | Non_unique | Key_name           | Seq_in_index | Column_name       
>>  | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment 
>> |
>> +-------+------------+--------------------+--------------+--------------------+-----------+-------------+----------+--------+------+------------+---------+
>> | photo |          1 | user_id            |            1 | user_id           
>>  | A         |     1372007 |     NULL | NULL   |      | BTREE      | NULL    
>> |
>> | photo |          1 | user_id            |            2 | banned            
>>  | A         |     1621463 |     NULL | NULL   |      | BTREE      | NULL    
>> |
>> | photo |          1 | group_id           |            1 | group_id          
>>  | A         |       12403 |     NULL | NULL   |      | BTREE      | NULL    
>> |
>> | photo |          1 | group_id           |            2 | album_id          
>>  | A         |      575358 |     NULL | NULL   |      | BTREE      | NULL    
>> |
>> +-------+------------+--------------------+--------------+--------------------+-----------+-------------+----------+--------+------+------------+---------+
>> 14 rows in set (0.00 sec)
>>
>> explain select *   FROM photo  WHERE ( album_id !=          '0' AND banned = 
>> '0' AND group_id      = '0' AND photo_id >          '27103315' AND rating != 
>> '1' AND user_id = '882092'      ) ORDER BY          photo_id LIMIT 50;
>> +----+-------------+-------+------+---------------------------------------------------+----------+---------+-------+------+-----------------------------+
>> | id | select_type | table | type | possible_keys                            
>>          | key      | key_len | ref   | rows | Extra                       |
>> +----+-------------+-------+------+---------------------------------------------------+----------+---------+-------+------+-----------------------------+
>> |  1 | SIMPLE      | photo | ref  | 
>> PRIMARY,user_id,album_id,album_id_random,group_id | group_id | 3       | 
>> const | 1438 | Using where; Using filesort |
>> +----+-------------+-------+------+---------------------------------------------------+----------+---------+-------+------+-----------------------------+
>> 1 row in set (0.00 sec)
>>
>> mysql>  select *   FROM photo  WHERE ( album_id !=          '0' AND banned = 
>> '0' AND group_id      = '0' AND photo_id >          '27103315' AND rating != 
>> '1' AND user_id = '882092'      ) ORDER BY          photo_id LIMIT 50;
>> Empty set (51.21 sec)
>>
>> mysql> explain select *   FROM photo use index (user_id)  WHERE ( album_id 
>> !=          '0' AND banned = '0' AND group_id      = '0' AND photo_id >      
>>     '27103315' AND rating != '1' AND user_id = '882092'      ) ORDER BY      
>>     photo_id LIMIT 50;
>> +----+-------------+-------+------+---------------+---------+---------+-------------+------+-----------------------------+
>> | id | select_type | table | type | possible_keys | key     | key_len | ref  
>>        | rows | Extra                       |
>> +----+-------------+-------+------+---------------+---------+---------+-------------+------+-----------------------------+
>> |  1 | SIMPLE      | photo | ref  | user_id       | user_id | 4       | 
>> const,const | 1694 | Using where; Using filesort |
>> +----+-------------+-------+------+---------------+---------+---------+-------------+------+-----------------------------+
>> 1 row in set (0.00 sec)
>>
>> mysql>  select *   FROM photo use index (user_id)  WHERE ( album_id !=       
>>    '0' AND banned = '0' AND group_id      = '0' AND photo_id >          
>> '27103315' AND rating != '1' AND user_id = '882092'      ) ORDER BY          
>> photo_id LIMIT 50;
>> Empty set (0.00 sec)
>>
>>
>> why does mysql use group_id index ?
>
> because in this case group_id would be faster than user_id
but in fact group_id is very slow (51.21 sec), user_id is (0.00 sec)
>
>> how to let mysql choose user_id as an index ? what's the mean of 'rows' ?
>
> valid rows after applying the WHERE to this index
the result is empty set, if what you said is true, then the rows must be
0 ?
>
>> how doese mysql get value of 'rows'?
>
> count returned values from index with valid WEHERE

>
>> I really dont wnat to use 'force index' because I'm using DBIx::Class in 
>> perl catalyst framework.
>
> why do you want to FORCE INDEX?
>
> did you tried an index(user_id, group_id)?
because this table is too big. if user_id can resolve this problem, I'll
not add one more index .

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

-- 

Thanks & Regards

Changying Li


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

Reply via email to