问题是,
1.如何使用 REGEXP
提高 mysql 中 SELECT
查询的性能?
表格看起来像
create table `tweets`(
`id` bigint auto_increment,
`tweet` varchar(140),
`time` datetime,
primary key(`id`)
);
下面的查询大约需要 0.35 秒。
select tweet from tweets where tweet regexp '^[abcdef]{1,4}$';
- 索引
tweet
会让它更快吗?如果是这样,我应该使用什么类型的索引? - 我的表引擎是
InnoDB
,还有其他表引擎会变得有用吗?
最佳答案
最好的办法是减少结果集,以便在评估之前根据正则表达式进行评估。就所有意图和目的而言,正则表达式是不可能建立索引的。
如果我必须为此想出一种方法,我会检查通常搜索的模式,并在插入时以某种可索引的方式标记它们。例如,如果您使用 ^[abcdef]{1,4}$
表达式进行大量搜索,我会制作一个 bool 列 first4AThruF
并在插入/update 触发器,根据是否匹配正则表达式将列更新为 true 或 false。如果我索引了 first4AThruF
列,并且该列具有足够的选择性,我可以编写查询:
select tweet from tweets where first4AThruF = true;
这应该很活泼。
要考虑的其他可能性是全文查询或 LIKE 子句,尽管在上述情况下我不希望它们能很好地工作。
关于mysql - 如何改进 MySQL REGEXP 搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8748272/