Hello.


> This index is not used at all for the select ?



substring(segment_0_sk,1,677) - a function is applied

to the indexed column. In my opinion, MySQL isn't so smart

to understand that this is a prefix. If you want to order only

on the prefix of your text column, think about max_sort_length

server system variable (it is a session variable as well). See:

  http://dev.mysql.com/doc/mysql/en/server-system-variables.html









Vincent De Groote <[EMAIL PROTECTED]> wrote:

> Hello,

> 

> I have the following table:

> 

> CREATE TABLE `list_datas_1` (

>  `list_id` bigint(20) NOT NULL,

>  `locale_id` bigint(20) NOT NULL,

>  `record_id` bigint(20) NOT NULL,

>  `segment_0` longtext,

>  `segment_1` longtext,

>  `segment_0_sk` longblob,

>  `segment_1_sk` longblob,

>  KEY `record_id` (`record_id`),

>  KEY `list_id` (`list_id`),

>  KEY `datas` (`locale_id`,`segment_0_sk`(677),`segment_1_sk`(338)),

>  CONSTRAINT `list_datas_1_ibfk_1` FOREIGN KEY (`list_id`) REFERENCES

> `list_definitions` (`list_definition_id`),

>  CONSTRAINT `list_datas_1_ibfk_2` FOREIGN KEY (`locale_id`) REFERENCES

> `locales` (`locale_id`),

>  CONSTRAINT `list_datas_1_ibfk_3` FOREIGN KEY (`record_id`) REFERENCES

> `records` (`record_id`)

> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

> 

> When I use the following statement:

> 

> select record_id, segment_0_sk, segment_1_sk from list_datas_1 order by

> locale_id, substring(segment_0_sk,1,677);

> 

> explain returns the following datas:

> 

> +----+-------------+--------------+------+---------------+------

> +---------+------+------+----------------+

> | id | select_type | table        | type | possible_keys | key  |

> key_len | ref  | rows | Extra          |

> +----+-------------+--------------+------+---------------+------

> +---------+------+------+----------------+

> |  1 | SIMPLE      | list_datas_1 | ALL  | NULL          | NULL | NULL

> | NULL | 2697 | Using filesort |

> +----+-------------+--------------+------+---------------+------

> +---------+------+------+----------------+

> 

> The two columns in the order by clause is a prefix of the 'datas' index.

> This index is not used at all for the select ?

> 

> Thanks for you replies.

> 

> vdg

> 

> 



-- 
For technical support contracts, goto https://order.mysql.com/?ref=ensita
This email is sponsored by Ensita.NET http://www.ensita.net/
   __  ___     ___ ____  __
  /  |/  /_ __/ __/ __ \/ /    Gleb Paharenko
 / /|_/ / // /\ \/ /_/ / /__   [EMAIL PROTECTED]
/_/  /_/\_, /___/\___\_\___/   MySQL AB / Ensita.NET
       <___/   www.mysql.com




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

Reply via email to