olliejones / index-wp-mysql-for-speed

通过向MySQL数据库表添加高性能键(数据库索引)来加速您的WordPress网站。

安装: 560

依赖项: 0

建议者: 0

安全性: 0

星标: 121

关注者: 9

分支: 11

开放问题: 18

类型:wordpress-plugin

1.4.19 2024-09-06 19:28 UTC

README

一个插件,用于将您的WordPress安装的MySQL数据库索引现代化。

更多信息请点击此处

国际化

使用此命令生成.pot文件。

wp i18n make-pot . languages/index-wp-mysql-for-speed.pot --path=/var/www/ubu2010.plumislandmedia.local

插件仓库内容

以下是关于仓库的信息。

制作一次性zip文件

在插件顶级目录中

wp dist-archive .

仓库更新说明。

  1. 进行更改。
  2. 确保更新当前版本号的所有位置。
  3. 提交到GitHub并推送。

为了自动将插件发布到WordPress仓库,我们使用名为WordPress Plugin Deploy的GitHub操作。在GitHub上发布版本的动作现在会将插件部署到WordPress仓库。更多信息请点击此处

自动化前的插件发布

请参阅此内容

仅为此存档目的。请使用自动化流程。

  1. 如果尚未完成,请执行以下操作
    svn co https://plugins.svn.wordpress.org/index-wp-mysql-for-speed svn
  2. 将待发布的文件复制到svn/trunk目录。
  3. svn目录添加任何新文件
    svn add svn/trunk/code/whatever.ext
  4. svn目录执行以下操作
    svn cp trunk tags/xx.yy.zz
    其中xx.yy.zz是要发布的版本
  5. 执行此操作
    svn ci -m "vxx.yy.zz commit message"
    svn ci可能会在网页浏览器中提示。如果看起来卡住了,请查看浏览器。

目标表是这些

  • wp_options: WordPress实例的数据,包含默认设置和主题/插件配置等信息。
  • wp_postmeta: 页面、文章、附件、WooCommerce产品和类似项目的元数据。
  • wp_usermeta: 描述WordPress用户和WooCommerce客户的元数据。它与wp_postmeta具有相同的特征。
  • wp_termmeta: 与wp_postmeta类似,此表包含描述标签、分类和各种WooCommerce数据的元数据。

更改键如何产生影响?(奇怪的)

所有现代MySQL数据库都使用名为InnoDB的存储引擎来存储数据。(MySQL的早期版本使用了一个不同、更简单的存储引擎,名为MyISAM。如果你还在使用它,是时候升级了。真的。)WordPress的数据库表都有一个主键。将主键想象成图书馆一本书的目录号。例如,你通过在图书馆的在线目录中搜索“MySQL”或“数据库管理”来查找Sheeri Cabral和Keith Murphy的优秀的MySQL管理员圣经。你的在线搜索会给你这本书的目录号。然后你在图书馆里四处寻找含有这样号码的书架。当你找到它时,你就取出这本书。InnoDB主键就像这样工作(但不需要四处乱逛)。一旦知道了主键,它就可以非常快速地获取数据。在数据库管理的世界中,这被称为聚集索引。因此,选择一个好的主键可以使InnoDB查找数据变得非常快。

InnoDB还提供次级键。次级键包含像“MySQL”或“数据库管理”这样的搜索词,我们曾经用它来查找Sheeri的书。这些次级键带我们找到主键。我们可以将InnoDB的键想象成按字母顺序排序。(从技术上讲,它们使用B树数据结构。)例如,作者键可能包含“Cabral, Sheeri”和“Murphy, Keith”。如果我在作者键中查找“Cabral”,我会立即找到Sheeri,获取主键,并获取她的书。(这在InnoDB中只需要几毫秒。)但是,如果我想查找“Sheeri”,我可能需要扫描每个作者的名字才能找到她:可能会有名叫“Aardvark, Sheeri”和“Zyzygy, Sheeri”的作者。我知道没有,但软件不知道。这需要时间。WordPress使用这种方式查找键时,会变得很慢。为了使这种查找更快,我们在作者的名字上添加一个新的次级键。

因此,我们可以调整主键和次级键,使WordPress更快地从数据库表中获取所需内容。这个插件就是做这个的。

我们具体做了哪些键的更改?(更加复杂)

主键有两个作用。它们可以唯一标识它们的数据,并且处理快速查找的聚集索引。它们的唯一标识作用意味着数据库设计者通常会设置表,为每个项目——每数据——设置一个自动递增的序列号作为主键。一旦你知道了序列号,你就可以快速从聚集索引中获取项目。但是,如果你用其他方式识别项目,你将多一个查找步骤,这会减慢你的速度。

例如,wp_options表包含WordPress每次有人查看页面时检索的数十行数据。例如,具有option_name为“home”的行包含这个WordPress实例的https://plumislandmedia.net。为了获取这些信息,WordPress会对数据库说。

SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'

wp_options 表有一个自动增长的唯一主键,每行都有一个数字,称为 option_id。它还有一个在 "autoload" 列上的键,这有助于加快对 autoload = 'yes' 的过滤。这是一个设计得很好的表(当然!WordPress 的开发者是诗人)。但我们能做得更好,尤其是考虑到我们经常需要获取所有自动加载的行。我们可以将表的主键改为包括两列而不是一列:autoload 和 option_id。它仍然具有唯一性:option_ids 是唯一的。但在主键中将 autoload 放在第一位意味着 MySQL 可以直接从聚簇索引中检索自动加载的行,而不是在次级键中查找主键。节省的毫秒和毫瓦累积起来,尤其是在繁忙的网站上。因此,我们这样更改主键。

ALTER TABLE wp_options ADD PRIMARY KEY (autoload, option_id)

实际的更改比这要复杂一些,但你应该明白了这个思路。