一部の行では、カバリング インデックスが LONGTEXT またはその他の LOB 列からのクエリを満たすのに役立つのでしょうか? (MySQL 8、MariaDB 10.5)
私はこのテーブルを持っています(WordPressで定義):
CREATE TABLE wp_options (
option_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
option_name VARCHAR(191) NOT NULL DEFAULT '' COLLATE 'utf8mb4_unicode_ci',
option_value LONGTEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
autoload VARCHAR(20) NOT NULL DEFAULT 'yes' COLLATE 'utf8mb4_unicode_ci',
PRIMARY KEY (option_id) USING BTREE,
UNIQUE INDEX option_name (option_name) USING BTREE,
INDEX autoload (autoload) USING BTREE
) ENGINE=InnoDB;
そして、次のクエリを実行する必要があります。
SELECT option_name, option_value FROM wp_options WHERE autoload='yes';
数百行を返します (多くの忙しい WordPress インストールでは)。これらの行のほとんどはかなり短い option_name、option_value 文字列ですが、長い文字列を持つ行もいくつかあります。WordPress はこのクエリを (すべてのページ ビューで) 頻繁に使用します。autoload
インデックスを使用してWHERE
条件を満たします。
私の質問:次のようなプレフィックスを含むカバリング インデックスを定義すると:
wp_options(autoload, option_name(40), option_value(131))
インデックス スキャンは、短い名前と値のクエリを直接満たすことができますか? または、MySQL はメイン テーブルの everyoption_name
と LONGTEXT オブジェクトを、option_value
短いかどうかに関係なく調べますか?