有什么方法可以让MySQL中的select达到LOW_PRIORITY的效果吗?

问题描述 投票:0回答:1

我阅读了mysql文档,发现

insert
有一个LOW_PRIORITY开关,而select有一个HIGH_PRIORITY

我需要一个“LOW_PRIORITY”来处理一些缓慢的查询。例如,我的客户想要一些

like
前导通配符查询,就像DBA SO中的这个问题,如何在MySQL中对数字列进行全文搜索以满足用户要求,以查询搜索表单'%中的数字字段334%'.

在我的例子中,这是一列包含 11 个数字字符的客户手机号码,我的一个客户有一个查询中间 4 位数字的用例。

我最初想使用FTS,但正如那里的答案所说“当搜索中间的数字字符串时,FULLTEXT是错误的方法。LIKE是唯一的方法,它需要对车牌进行全面扫描。实时与它。”

因此,我必须忍受缓慢的查询,并让我的客户知道,如果这样做,结果会很慢。但我需要确保该查询不会使用我的所有 MySQL 服务器资源,以便我的其他客户可以在这段时间内执行他们的“正常”查询。

所以我需要 LOW_PRIORITY 的效果来作为前导通配符查询。有办法做到吗?

mysql optimization select wildcard
1个回答
0
投票

MySQL 没有您所描述的功能。

LOW_PRIORITY
HIGH_PRIORITY
的选项仅适用于表锁定存储引擎,例如MyISAM或MEMORY。这些选项对 InnoDB 表没有影响。 InnoDB 是默认的存储引擎,InnoDB 的好处通常超过使用 MyISAM 的选择,因此您应该更喜欢 InnoDB 而不是 MyISAM。

即使对于 MyISAM,

LOW_PRIORITY
选项也不适用于
SELECT
查询。这仅适用于
INSERT
/
UPDATE
/
DELETE

对于您的场景,更好的解决方案是创建副本数据库服务器,并在副本上运行长时间运行的查询(例如报告)。这消除了查询竞争资源并阻碍源服务器上其他重要查询的可能性。

MySQL 中的复制是异步的,这意味着即使您通过昂贵的查询降低副本服务器的速度,也不会对源服务器产生任何影响。它可能会稍微延迟复制,但这不会影响源。

© www.soinside.com 2019 - 2024. All rights reserved.