6

在过去的几天里,这一直让我头疼。我之前创建了数据库,对LIKE. 我使用的查询是这样的,

SELECT  ....
FROM    .... JOINS ....
WHERE   tableA.col1 LIKE '%keyword%' OR
        tableB.col2 LIKE '%keyword%' OR
        tableC.col2 LIKE '%keyword%' OR
        .....

当我测试查询时,它非常快,因为它只有大约 100-150 条记录。我想搜索包含关键字的任何字符串。几个月过去了,该数据库变得庞大,包含 50,000 条记录。而这一次,我已经体验到了查询的低性能。它非常低。

有什么建议可以改进吗?我无法更改数据库,因为它已被公司使用。

顺便说一句,我的桌子都是INNODB

4

3 回答 3

1

使用通配符前缀'%abc'很可能会停止使用任何索引。

没有索引=全表扫描=(通常)慢...

顺便说一句,50,000 条记录并不多;它很小。

您是否考虑过使用 MySql 的全文搜索功能?(需要 MyISAM 表)

于 2012-10-29T00:04:13.353 回答
1

这种类型的搜索称为全文搜索,您确实需要为此使用专门的系统,而不是强制数据库不断进行表扫描。您基本上将要搜索的所有文本移交给搜索引擎,然后搜索引擎将其编入索引以进行快速搜索。

一种选择是Apache Lucene

于 2012-10-29T00:11:29.140 回答
0

如果你不能像其他朋友提到的那样使用全文搜索,有一个 SQL 优化点可以改进你的查询:

SELECT  ....
FROM    (SELECT * FROM tableA WHERE col1 LIKE '%keyword%') A JOIN 
        (SELECT * FROM tableB WHERE col2 LIKE '%keyword%') B ON ... JOIN
        (SELECT * FROM tableC WHERE col2 LIKE '%keyword%') C ON ...

关键是在任何加入之前缩小结果集。

于 2012-10-29T06:04:25.933 回答