栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL / PHP搜索效率

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL / PHP搜索效率

无法提高

LIKE '%pattern%'
查询效率。一旦获得大量数据,使用通配符查询将比使用全文本索引解决方案慢数百倍或数千倍。

您应该看一下我为MySQL大学所做的演示:http : //www.slideshare.net/billkarwin/practical-
full-text-search-with-my-sql

这是使其工作的方法:

  1. 首先确保您的表使用MyISAM存储引擎。MySQL FULLTEXT索引仅支持MyISAM表。( 2012年11月1日编辑: MySQL 5.6为InnoDB表引入了FULLTEXT索引类型。)

    ALTER TABLE Entries ENGINE=MyISAM;
  2. 创建全文索引。

    CREATE FULLTEXT INDEX searchindex ON Entries(title, tags, entry);
  3. 搜索一下!

    $search = mysql_real_escape_string($search);

    $titles = mysql_query(“SELECt title FROM Entries
    WHERe MATCH(title, tags, entry) AGAINST(‘$search’)”);
    while($row = mysql_fetch_assoc($titles)) {
    $result[] = $row[‘title’];
    }

请注意,在

MATCH
子句中命名的列 必须 与在全文索引定义中声明的列相同,并且顺序相同。否则它将无法正常工作。


我曾尝试使用全文本索引搜索,但我无法使其正常工作……我只是想知道这样做是否可以提高效率。

这就像在说:“我不知道该如何使用电锯,所以我决定用小刀砍掉这棵红木树。我如何使它和电锯一样好?”


关于您关于搜索匹配超过50%行的单词的评论。

MySQL手册说这个:

需要绕过50%限制的用户可以使用布尔搜索模式;请参见第11.8.2节“布尔全文搜索”。

与此:

自然语言搜索的50%阈值由所选的特定加权方案确定。要禁用它,请在storage / myisam / ftdefs.h中查找以下行:

define GWS_IN_USE GWS_PROB

将该行更改为此:

define GWS_IN_USE GWS_FREQ

然后重新编译MySQL。在这种情况下,无需重建索引。

另外,您可能正在搜索 停用词 。这些是全文搜索会忽略的单词,因为它们太常见了。诸如“
the”之类的词。见http://dev.mysql.com/doc/refman/5.1/en/fulltext-
stopwords.html



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/432872.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号