社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

搜索MySQL文本列的最佳方式

Miguel Moreira • 3 年前 • 1187 次点击  

我的产品存储在MySQL数据库中,这是一个Wordpress网站,但我的数据存储在自定义表中。我需要搜索产品,我目前面临一些性能问题,我希望有人能帮助我或为我指路。

由于我每天收到一个文件(*.csv)来更新我的所有产品(添加、更新或删除产品),我有一个读取文件和填充/更新表格的过程。在这个过程中,我添加了一个步骤来过滤数据,并将任何特殊字符替换为“非特殊”字符(例如:将“Ô替换为“a”)。

到目前为止,我已经有了一个与产品表(products)相关的表(products_search),我用这个表进行搜索。当用户搜索某个内容时,我修改输入以替换特殊字符,因此搜索将直接在表上进行。

问题是: 在“文本”列中搜索很慢,甚至在该列上添加索引。我现在正在这样搜索:

select * from products_search
     where description like %search_word_1%
        or description like %search_word_2% ... 

如果我得到一个结果,我将获得ID和产品表的关联,并获得可能需要向用户显示的所有信息。

寻找的解决方案: 我正在寻找一种在产品搜索表上搜索性能更好的方法。据我所知,wordpress搜索引擎只对“posts”表起作用。有什么方法可以更快地搜索吗?也许是使用插件,或者只是改变搜索的方式。

谢谢大家

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132373
 
1187 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Rick James
Reply   •   1 楼
Rick James    3 年前

我认为我们需要修改夜间加载,以使索引创建更高效。

我假设:

  • CSV文件中的数据将替换现有数据。
  • 你愿意使用 FULLTEXT 用于搜索。

然后做:

  1. CREATE TABLE new_data (...) ENGINE=InnoDB;
  2. LOAD DATA INTO new_data ...;
  3. 清理中的数据 new_data .
  4. ALTER TABLE new_data ADD FULLTEXT(...) ; 此处要索引的列存在,或在步骤1或3中添加。
  5. RENAME TABLE real_data TO old_data, new_data TO real_data;
  6. DROP TABLE old_data;

请注意,这基本上没有停机时间 real_data 所以你可以继续这样做 SELECTs .

您还没有解释如何将单个CSV文件喷洒到wp_帖子和wp_Posteta中。这听起来像是埋在我第三步里的噩梦。

全文 远比用 wp_postmeta (我不知道是否有现有的方法或插件来实现这一点。)

有了`全文(描述),您的代码片段将使用

WHERE MATCH(description) AGAINST ('word1 word2' IN BOOLEAN MODE)

而不是非常缓慢 LIKE 使用前导通配符。

如果你必须使用wp_Posteta,我建议 https://wordpress.org/plugins/index-wp-mysql-for-speed/