全文搜索速度慢

时间:2016-04-22 14:06:22

标签: php mysql database

我有一个像这样的数据库

DATABASE

warehouse_folders
folder_id
folder_box_id
folder_number
folder_title
folder_content
folder_notes

warehouse_folder_value
folder_value_id
folder_value_folder_id
folder_value_01
folder_value_02
folder_value_03
folder_value_04
folder_value_05
folder_value_06
folder_value_07
folder_value_08
folder_value_09
folder_value_00
folder_value_11
folder_value_12

warehouse_box
box_id
box_number
box_description

**和大约40.000行。 所有字段都是varchar,我为所有人创建了索引。

我想执行全文搜索(PHP和MySQL_),但是当添加JOINS数据库停止响应时。

有什么帮助可以解决?**

QUERY

SELECT
*

FROM
warehouse_folders

LEFT JOIN
warehouse_folder_value ON folder_value_id = folder_id

LEFT JOIN
warehouse_boxes ON box_id = folder_box_id



WHERE
(

(`box_number` LIKE '%".$search."%') OR
(`box_description` LIKE '%".$search."%') OR
(`folder_number` LIKE '%".$search."%') OR
(`folder_title` LIKE '%".$search."%') OR
(`folder_content` LIKE '%".$search."%') OR
(`folder_notes` LIKE '%".$search."%') OR
(`folder_value_01` LIKE '%".$search."%') OR
(`folder_value_02` LIKE '%".$search."%') OR
(`folder_value_03` LIKE '%".$search."%') OR
(`folder_value_04` LIKE '%".$search."%') OR
(`folder_value_05` LIKE '%".$search."%') OR
(`folder_value_06` LIKE '%".$search."%') OR
(`folder_value_07` LIKE '%".$search."%') OR
(`folder_value_08` LIKE '%".$search."%') OR
(`folder_value_09` LIKE '%".$search."%') OR
(`folder_value_10` LIKE '%".$search."%') OR
(`folder_value_11` LIKE '%".$search."%') OR
(`folder_value_12` LIKE '%".$search."%')

)

1 个答案:

答案 0 :(得分:0)

  1. like运算符不执行全文搜索,它执行简单的模式匹配。 match(...) against(...)运算符执行全文搜索,但您应创建全文索引以支持此类搜索。

  2. 类似于“%constant%”搜索不能使用索引,因为该模式可以适合字段中文本的任何部分。

  3. Mysql对查询中的表使用单个索引。使用or条件时,它可能会为操作中的1个字段使用索引,而不是所有字段。您可以重写where条件以使用union而不是或 - 但只要模式具有前导通配符,就没有用。

  4. 以上组合会导致您的SQL查询速度变慢。您可以使用解释来验证上述内容,这无疑将显示全表扫描。

    根据您的具体需求,转换为全文索引和全文搜索,或实施某些外部全文搜索解决方案可以提高您的效果。