gpt4 book ai didi

mysql - 如何使用 MySQL 将表预加载到 INNODB 缓冲池中?

转载 作者:IT王子 更新时间:2023-10-29 00:30:52 26 4
gpt4 key购买 nike

我有一个使用 MySQL 的电子商务应用程序,我希望它更快。当在之前访问过的网站上访问某个部分 # 时,该部分加载很快,因为所有必要的数据都已经在 INNODB 缓冲池中。但是,如果以前从未加载过 # 部分,则该数据还不在缓冲池中,因此需要从磁盘读取,这很慢。我将我的 INNODB 缓冲池设置为 2GB,而整个数据库只有 350MB 左右,因此缓冲池中有足够的空间来加载整个数据库。我可以从 INNODB 统计数据中看到,目前只有大约一半的缓冲池被使用。

我找到了预加载数据的引用资料,也称为“预热”缓冲池,例如 Quickly preloading Innodb tables in the buffer pool或 mysqldump.azundris.com/archives/70-Innodb-cache-preloading-using-blackhole.html。该策略主要涉及强制对每个表进行表扫描,因为 MySQL 没有预加载数据的 native 方法。

我不想手动创建一个脚本来列出我数据库中的每个表并且必须这样做。我怎样才能创建一个脚本,自动为每个表执行选择,并自动挑选出一个非索引列,以便执行表扫描?

最佳答案

这应该会给你一个要运行的查询列表;)

SELECT 
CONCAT('SELECT ',MIN(c.COLUMN_NAME),' FROM ',c.TABLE_NAME,' WHERE ',MIN(c.COLUMN_NAME),' IS NOT NULL')
FROM
information_schema.COLUMNS AS c
LEFT JOIN (
SELECT DISTINCT
TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME
FROM
information_schema.KEY_COLUMN_USAGE
) AS k
USING
(TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME)
WHERE
c.TABLE_SCHEMA = 'yourDatabase'
AND k.COLUMN_NAME IS NULL
GROUP BY
c.TABLE_NAME

你可以把它放到存储过程中,然后用游标遍历结果集。从每一行创建一个准备好的语句,然后执行。

关于mysql - 如何使用 MySQL 将表预加载到 INNODB 缓冲池中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3430865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com