varchar和int列的多索引。但需要是FullText

时间:2017-07-27 08:23:15

标签: mysql performance optimization indexing

这是我的查询。

select distinct p_code from myTable 
    where ((INSTR(LOWER(subject), LOWER('jpg'))) )    
    order by code1, code2 limit  400,20;

p_code : INT
subject : VARCHAR
code1 : INT
code2 : INT

有一个INSTR(subject),然后我需要将 FullText索引添加到subject列。

还有一个order by code1, code2,所以我想我必须为这三列(subject, code1, code2)添加索引。

但是正如您所知,由于INT列,无法添加 FullText索引

在这种情况下我该怎么做?

1 个答案:

答案 0 :(得分:1)

where ((INSTR(LOWER(subject), LOWER('jpg'))) ) 

- >

where subject LIKE '%jpg%'

或者可能

where subject LIKE '%jpg'

使用以subject结尾的_ci排序规则。

但这不会明显加快查询速度,因为必须扫描整个表格。

即使您添加了INDEX(code1, code2),并且优化程序选择使用它,随着OFFSET的增加,它也会越来越慢。但这是可以解决的 - remembering where you left off

FULLTEXT不太可能有所帮助。

另一方面......

如果您有extent列有时(或经常)" jpg",那么

where `extent` = 'jpg'

INDEX(extent, code1, code2)

不必进行表扫描。 (仍然,我的链接"分页"适用。)