当前位置: 首页 > 面试题库 >

优化mysql全文搜索

孟昆
2023-03-14
问题内容

我想在我的网页中进行全文搜索。我需要分页进行搜索。我的数据库每张表有50,000+行。我已经改变了我的表,并使其(title,content,date)成为索引。该表始终处于更新状态,仍然有一个id自动增加的列。而最新date的总是在表格的末尾。

date  varchar(10)
title  text
content  text

但整个查询时间将花费1.5+ seconds。我通过Google搜索了许多文章,有的文章写道,只有限制Index字段字长才能帮助更快地进行搜索。但作为一种text类型,它can not会像这样改变一定的长度(我尝试过ALTER TABLE table_1 CHANGE标题`titleTEXT(500) CHARACTER
SET utf8 COLLATE utf8_unicode_ci NOT NULL`,不起作用)

date  varchar(10)
title  text(500)
content  text(1000)

因此,除了Sphinx第三方脚本。如何仅使用sql优化全文搜索?查询代码在这里:

(SELECT 
title,content,date 
FROM table_1 
WHERE MATCH (title,content,date) 
AGAINST ('+$Search' IN BOOLEAN MODE)) 
UNION 
(SELECT 
title,content,date 
FROM table_2 
WHERE MATCH (title,content,date) 
AGAINST ('+$Search' IN BOOLEAN MODE)) 
Order By date DESC

谢谢。


问题答案:

根据问题的后续注释,您在列上拥有btree索引,而不是全文本索引。

对于针对搜索的匹配(标题,内容),您需要:

CREATE FULLTEXT INDEX index_name ON tbl_name (title,content);

我不确定它是否会接受其中的日期字段(后者可能根本不相关)。



 类似资料:
  • 问题内容: 这是我测试过的。 这是create语句。 等号和“赞”效果很好。所以为什么? 问题答案: 全文搜索需要多种多样的方式来消除重复的“噪音”。用最少的数据进行测试将产生较差的结果。将您的整个收藏集投入其中,以获取有意义的内容。如以下某些链接所示,甚至可以尝试搜索最小字数的设置。 停用词 有各种语言的停用词 MySql 列表,这些词表示在搜索过程中忽略的无关紧要的词。该列表已编译到服务器中,

  • 问题内容: 我正在将所有站点代码从使用mysql_ *函数转换为PDO。对于我的需求,PDO上的PHP文档尚不清楚。它为您提供了要使用的功能,但没有详细介绍它们在不同情况下的功能。 基本上,我有一个mysql全文搜索: 实际的语句要长得多,但这基本上就是它的作用。 我的问题是,如何将其纳入PDO? 我知道您不是要在位置标记周围使用引号,那么您是否将它们放在AGAINST()函数中?我包括他们吗?如

  • 本文转载自 developers.google.com 作者:Eiji Kitamura 原文链接:搜索优化 网站的访问者不只有人类,还有搜索引擎网络抓取工具。了解如何改善您的网站的搜索精度和排名。 确定网页的网址结构。 自适应设计是最受推崇的设计方法。 为独立的桌面版本/移动版本网站使用 rel='canonical' + rel='alternate'。 为动态提供独立桌面版本/移动版本 HT

  • 下面说的优化基于 MySQL 5.6,理论上 5.5 之后的都算适用,具体还是要看官网 服务状态查询 查看当前数据库的状态,常用的有: 查看系统状态:SHOW STATUS; 查看刚刚执行 SQL 是否有警告信息:SHOW WARNINGS; 查看刚刚执行 SQL 是否有错误信息:SHOW ERRORS; 查看已经连接的所有线程状况:SHOW PROCESSLIST; 查看当前连接数量:SHOW

  • 在整体的系统运行过程中,数据库服务器 MySQL 的压力是最大的,不仅占用很多的内存和 cpu 资源,而且占用着大部分的磁盘 io 资源,连 PHP 的官方都在声称,说 PHP 脚本 80% 的时间都在等待 MySQL 查询返回的结果。由此可见,提高系统的负载能力,降低 MySQL 的资源消耗迫在眉睫。 常见优化方法: 1、页面缓存 1、页面缓存功能是降低MySQL的资源消耗的(PHPCMS V9

  • 问题内容: 查询如何 被优化? 这里的主要问题是第一个通配符,它​​阻止DBMS使用索引。 编辑:此外,某字段值是纯字符串(不是一段文本),因此无法执行全文搜索。 问题答案: 两种方式: (1)使用内存中的表,它可以非常快速地运行。 (2)制定比更好的索引和搜索算法。如果不了解您的问题,就不可能对此提出任何建议。 正如您所指出的那样,%bar%模式可确保对每个查找进行表扫描,从而使数据库软件中任何