如何将索引添加到此类sql查询中?
请告诉我如何添加索引到这个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
您需要更改引擎你的表在MyISAM。
的#1214 - The used table type doesn't support FULLTEXT indexes
OP不需要全文索引,并且在最新版本的MySQL中,即使innodb支持全文索引。 – Shadow
首先可能重复,重写查询,这样你就不会混合类型。也就是说,摆脱了单引号:
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()
类型。是否有理由为此使用文本?
不要打扰前缀('城市(32)');即使在这种情况下也可能是无用的。 OP真的需要改变为'varchar'来避免前缀,然后使用你的第一个建议。 –
检查字段的基数并在该字段或字段组合上创建索引。对于那个基数(唯一性)很高,这是很好的指标。 position_id和is_pub的组合应该在你的查询中很好。请提供更多的上下文。 –
你不需要全文索引,只是一个“普通”索引。全文索引是为了在文本中搜索单词。 – Shadow