开发者 |
OllieJones
rjasdfiii |
---|---|
更新时间 | 2024年10月29日 01:40 |
PHP版本: | 5.6 及以上 |
WordPress版本: | 6.7 |
版权: | GPL v2 or later |
版权网址: | 版权信息 |
wp_posts
has a key to let it quickly find posts when you know the author. Without its post_author key MySQL would have to scan every one of your posts looking for matches to the author you want. Our users know what that looks like: slow. With the key, MySQL can jump right to the matching posts.
In a new WordPress site with a couple of users and a dozen posts, the keys don't matter very much. As the site grows the keys start to matter, a lot. Database management systems are designed to have their keys updated, adjusted, and tweaked as their tables grow. They're designed to allow the keys to evolve without changing the content of the underlying tables. In organizations with large databases adding, dropping, or altering keys doesn't change the underlying data. It is a routine maintenance task in many data centers. If changing keys caused databases to lose data, the MySQL and MariaDB developers would hear howling not just from you and me, but from many heavyweight users. (You should still back up your WordPress instance of course.)
Better keys allow WordPress's code to run faster without any code changes. Experience with large sites shows that many MySQL slowdowns can be improved by better keys. Code is poetry, data is treasure, and database keys are grease that makes code and data work together smoothly.
Which tables does the plugin add keys to?
This plugin adds and updates keys in these WordPress and WooCommerce tables.
wp help index-mysql
for details. A few examples:
wp index-mysql status
shows the current status of high-performance keys.wp index-mysql enable --all
adds the high-performance keys to all tables that don't have them.wp index-mysql enable wp_postmeta
adds the high-performance keys to the postmeta table.wp index-mysql disable --all
removes the high-performance keys from all tables that have them, restoring WordPress's default keys.wp index-mysql enable --all --dryrun
writes out the SQL statements necessary to add the high-performance keys to all tables, but does not run them.wp index-mysql enable --all --dryrun | wp db query
writes out the SQL statements and pipes them to wp db to run them.wp-content/mu-plugins
. Some sites' configurations prevent the web server from writing files into that directory. In that case the plugin will still work correctly. But, after WordPress core version upgrades you may have to revisit the Tools > Index MySQL page and correct the keying on some tables. Why? The mu-plugin prevents core version updates from trying to change keys.
Composer
If you configure your WordPress installation using composer, you may install this plugin into your WordPress top level configuration with the command
composer require "wpackagist-plugin/index-wp-mysql-for-speed":"^1.4"
During composer installation the plugin can automatically copy the necessary source file (see the previous section) into the must-use plugins directory. If you want that to happen, you should include these scripts in your top-level composer.json
file.
"scripts": { "install-wp-mysql-mu-module": [ "@composer --working-dir=wordpress/wp-content/plugins/index-wp-mysql-for-speed install-mu-module" ], "post-install-cmd": [ "@install-wp-mysql-mu-module" ], "post-update-cmd": [ "@install-wp-mysql-mu-module" ] },
Yes. You already knew that.
Yes. Some WordPress databases have nonstandard prefixes. That is, their tables are named something_posts, something_postmeta, and so forth instead of wp_posts and wp_postmeta. This works with those databases. = My WordPress host offers MariaDB, not MySQL. Can I use this plugin? Yes.
MySQL versions 5.5.62 and above, 5.6.4 and above, 8 and above. MariaDB versions 5.5.62 and above.
InnoDB only. If your tables use MyISAM (the older storage engine) or the older COMPACT row format, this plugin offers to upgrade them for you.
Please read this. = Is this safe? Can I add high-performance keys and revert back to WordPress standard keys safely? Yes. it is safe to add keys and revert them. Changing keys is a routine database-maintenance operation. As you know you should still keep backups of your site: other things can cause data loss. = My site uses WooCommerce HPOS (High Performance Order Storage). Is this plugin still helpful? Yes. WooCommerce still uses core WordPress tables for your shop's products, posts, pages, and users. This plugin adds high-performance keys to those tables. High Performance Order Storage, true to its name, stores your shop's orders in a more efficient way. Formerly orders were stored in those same core WordPress tables.
This plugin only changes database indexes. If the other plugin does not change database indexes, it is very likely compatible with this one. Of course, if you find an incompatibility please open a support topic.
Sometimes the Index WP MySQL For Speed plugin for WordPress generates errors when you use it to add keys. These can look like this or similar: Fatal error: Uncaught ImfsException: [0]: Index for table 'wp_postmeta' is corrupt; try to repair it First, don't panic. This (usually) does not mean your site has been corrupted. It simply means your MariaDB or MySQL server was not able to add the keys to that particular table. Your site will still function, but you won’t get the benefit of high-performance keys on the particular table. Very large tables are usually the ones causing this kind of error. Very likely you ran out of temporary disk space on your MariaDB or MySQL database server machine. The database server makes a temporary copy of a table when you add keys to it; that allows it to add the keys without blocking your users. It’s possible to correct this problem by changing your MariaDB or MySQL configuration. Instructions are here.
If the plugin is activated during a WordPress version update, it prevents the update workflow from removing your high-performance keys (Version 1.4.7). = My site has thousands of registered users. My Users, Posts, and Pages panels in my dashboard are still load slowly even with this plugin. We have another plugin to handle lots of users, Index WP Users For Speed. Due to the way WordPress handles users, just changing database keys is not enough to solve those performance problems.
Persistent object caching can help your site's database performance by reducing its workload. You can read about it here. If your hosting provider doesn't offer redis or memcached cache-server technology you can try using our SQLite Object Cache plugin for the purpose.
Database keying works by making copies of your table’s data organized in ways that are easy to randomly access. Your MariaDB or MySQL server automatically maintains the copies of your data as you insert or update rows to each table. And, the keying task adjusts the amount of free space in each block of your table’s data in preparation for the insertion of new rows. When free space is available, inserting new rows doesn’t require relatively slow block splits. Tables that have been in use for a long time often need new free space in many blocks. When adding keys, it is normal for table sizes to increase. It’s the oldest tradeoff in computer science: time vs. space.
Yes. Once the high-performance keys are in place MariaDB and MySQL automatically maintain them as you update, delete, or insert rows of data to your tables. There is no need to do anything to apply the keys to new data: the DBMS software does that for you.
You can revert the keys from the Index MySQL Tool under the Tools menu, or use the wp-cli command wp index-mysql disable --all
. Notice that if you deactivate or delete the plugin without doing this, the high-performance keys remain.
Please see more questions and answers here.