使用哪种索引可以改善具有LIKE'%value%'ORDER BY datetime的SQL查询

时间:2019-04-16 16:56:32

标签: sql postgresql performance sql-order-by sql-like

我正在尝试实现一个简单的搜索,该搜索将返回表中包含按日期排序的子字符串的所有记录。

假设我们有一个包含以下各列的表A:

id (integer),
text (text),
created_at (timestamp without timezone)

查询将类似于:

SELECT text FROM A
WHERE text LIKE '%value%'
ORDER BY created_at
LIMIT 20

表A有很多行(比方说,以百万为单位),其中一种优化是在created_at字段上创建btree索引,以便SQL可以从顶部开始并按顺序逐行检查。当发现20时,它可能会停止。实际上,如果用户猜测要搜索的值正确,这似乎是不错的选择。 但是,如果用户搜索不存在的单词,则SQL将需要扫描所有记录,这将导致非常糟糕的性能。 另一方面,如果我为文本创建gin索引,则可以找到记录,但是如果该术语存在于所有记录中,则SQL将需要对其进行手动排序。

似乎第二种意见会更好。有没有更好的方法,也许使用noSQL数据库并利用并行化优势?

0 个答案:

没有答案