类似mysql的查询拉取结果很慢

标签 mysql sql sql-like query-performance

我有一个非常大的 mysql 数据库,包含 35 个表。每个表的结构不同,但都有一些共同的字段。 'entity_name' 是所有表中的一个这样的公共(public)字段。它是一个 VARCHAR 字段。有些表包含数百万条记录,而有些表包含数十亿条记录。

我在所有这些表中搜索一个搜索键并提取实体名称,以及包含匹配记录的表中的一些公共(public)字段;将结果推送到一个数组,最后以 HTML 格式显示。查询非常简单:

SELECT * FROM table_name WHERE entity_name LIKE '%search_key%' //Partial match.

SELECT * FROM table_name WHERE entity_name LIKE 'search_key%' //Begins with.

SELECT * FROM table_name WHERE entity_name IN('search_key') //Equal to.

通常使用第一个查询。

数据库的大小约为 9GB。搜索过程非常缓慢。根据研究,我发现使用索引可能不起作用,因为我正在使用此进行搜索:entity_name LIKE '%search_key% 通配符出现在前面。分区也不起作用(如果我错了请更正)因为我们关注的是 varchar 字段。

欢迎提出任何想法/建议。

最佳答案

当您说 LIKE '%search_key' 本质上很慢时,您是对的。那种搜索词不是sargable因为它以 % 开头。 entity_name 列上的索引可能仍然有点帮助,特别是如果您的表有很多列:MySQL 可能能够扫描索引而不是表。但它永远不会很快。

您应该考虑使用 MySQL FULLTEXT searching对于这个应用程序。

关于类似mysql的查询拉取结果很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51244947/

相关文章:

mysql - 快速、不安全的数据库哈希函数可跨多个数据库重现

sql - 字符串或二进制数据将被截断

sql - 从两个表中选择以查找基于生效日期的增值税税率

sql - 部分字符串匹配 SQL - 内连接

MYSQL 选择特定行或第一行(如果不存在)

php - php 中的安全首选项、php 函数来清理输入

mysql - Workbench 版本不匹配 Mysql 8 至 5.6

sql - 检查varbinary字段上的ISNULL的策略?

php - 使用 LIKE 语句搜索 MySQL 数据库

java - 不能在 JDBC PreparedStatement 中使用 LIKE 查询?