2017-07-05 30 views
0

请告诉我如何添加索引到这个SQL查询?如何将索引添加到此类sql查询中?

SELECT * FROM table WHERE (cities IS NULL) AND (position_id = '2') AND (is_pub = '1') ORDER BY ordering asc LIMIT 1

字段类型:

  • 城市=文本
  • position_id = INT(11)
  • is_pub = TINYINT(1)

我尝试这样: ALTER TABLE table ADD FULLTEXT ('cities', 'position_id', 'is_pub');

但我得到一个错误:The used table type doesn't support FULLTEXT indexes

+0

检查字段的基数并在该字段或字段组合上创建索引。对于那个基数(唯一性)很高,这是很好的指标。 position_id和is_pub的组合应该在你的查询中很好。请提供更多的上下文。 –

+0

你不需要全文索引,只是一个“普通”索引。全文索引是为了在文本中搜索单词。 – Shadow

回答

0

首先可能重复,重写查询,这样你就不会混合类型。也就是说,摆脱了单引号:

SELECT * 
FROM table 
WHERE (cities IS NULL) AND (position_id = 2) AND (is_pub = 1) 
ORDER BY ordering asc 
LIMIT 1; 

然后,这个最佳的查询是table(position_id, is_pub, cities, ordering)

create index idx_table_4 on table(position_id, is_pub, cities(32), ordering); 

前三列可以在索引中的顺序,只要因为他们是前三名。

您应该将cities更改为varchar()类型。是否有理由为此使用文本?

+0

不要打扰前缀('城市(32)');即使在这种情况下也可能是无用的。 OP真的需要改变为'varchar'来避免前缀,然后使用你的第一个建议。 –