【问题标题】:Improving the my sql query for doing search for text in all columns of the table改进用于在表的所有列中搜索文本的 my sql 查询
【发布时间】:2012-09-28 17:31:24
【问题描述】:

我必须实现用户在搜索字段中输入一些文本的功能,我需要从表中查询并拉出与该文本相关的项目。在表中,我有近 8 个面向用户的列以及通过前端发生插入时自动插入的 4 列。

以下是我编写的查询,它通过 mysql 客户端运行,

select SQL_CALC_FOUND_ROWS * 
from `database`.`ttable` 
WHERE testdatetime BETWEEN '2012/05/01' and '2012/09/27' 
and testimg IS NOT NULL 
and testtitle LIKE 't%' 
OR testname LIKE 't%' 
OR testaddr LIKE 't%'  
OR testph LIKE 't%' 
OR testoffs LIKE't%' 
OR testmaps LIKE 't%' 
OR testimg LIKE 't%' 
OR testdatetime LIKE 't%'  
order  by testdatetime desc;

现在由于某种原因,这个查询对我来说有点奇怪,因为我正在检查每一列的值,并想检查这是否是实现它的正确方法,或者 mysql 有一些内置的特性,这些特性比这个查询产生更好的结果.感谢有人能指出正确的方向。由于我尚未实现此功能,我不知道它在性能方面的表现如何,但我知道 Like 子句在操作中有点密集。

【问题讨论】:

  • 我可能独自一人,但使用 BETWEEN 总是让我担心。根据数据库,它可能是 > 或 = 或
  • 我想避免 > 或 = 或

标签: mysql sql database search


【解决方案1】:

您最好对字符串搜索使用全文搜索而不是类似语句。这样,您还可以找到搜索词的变体。这是 MySQL http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html全文搜索的链接

【讨论】:

  • 根据文档全文搜索仅适用于 myisam,我使用 innodb。我很想使用它,因为与使用 between 和 like.version 相比,这种方法看起来很干净。我使用的是我的 sql 版本5.5.13 与 Innodb 引擎。似乎只有升级会给我这个好处。
【解决方案2】:

MySQL 有一个内置功能可以做你想做的事。它被称为全文索引。这将比一堆类似的语句更有效。这里有一些东西可以帮助您入门。

http://www.databasejournal.com/sqletc/article.php/1578331/Using-Fulltext-Indexes-in-MySQL---Part-1.htm

【讨论】:

    猜你喜欢
    • 2015-03-11
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2018-03-25
    • 2021-09-18
    相关资源
    最近更新 更多