Commit d178d1df1d for woocommerce

commit d178d1df1d615cd7e8423da4e75480facbd1c1ad
Author: Boro Sitnikovski <buritomath@gmail.com>
Date:   Tue Dec 2 20:54:03 2025 +0100

    Add index to user_email within woocommerce_downloadable_product_permissions to improve performance (#62101)

    * Add index to user_email within woocommerce_downloadable_product_permissions to improve performance

    * update version for release

    ---------

    Co-authored-by: Michael Pretty <prettyboymp@users.noreply.github.com>

diff --git a/plugins/woocommerce/changelog/fix-wccom-1958 b/plugins/woocommerce/changelog/fix-wccom-1958
new file mode 100644
index 0000000000..f6fe7e481a
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-wccom-1958
@@ -0,0 +1,4 @@
+Significance: patch
+Type: performance
+
+Add index to user_email within woocommerce_downloadable_product_permissions to improve performance
diff --git a/plugins/woocommerce/includes/class-wc-install.php b/plugins/woocommerce/includes/class-wc-install.php
index c8d094890c..034d481c85 100644
--- a/plugins/woocommerce/includes/class-wc-install.php
+++ b/plugins/woocommerce/includes/class-wc-install.php
@@ -316,6 +316,7 @@ class WC_Install {
 		'10.5.0' => array(
 			'wc_update_1050_migrate_brand_permalink_setting',
 			'wc_update_1050_enable_autoload_options',
+			'wc_update_1050_add_idx_user_email',
 		),
 	);

@@ -1816,7 +1817,8 @@ CREATE TABLE {$wpdb->prefix}woocommerce_downloadable_product_permissions (
   KEY download_order_key_product (product_id,order_id,order_key(16),download_id),
   KEY download_order_product (download_id,order_id,product_id),
   KEY order_id (order_id),
-  KEY user_order_remaining_expires (user_id,order_id,downloads_remaining,access_expires)
+  KEY user_order_remaining_expires (user_id,order_id,downloads_remaining,access_expires),
+  KEY idx_user_email (user_email(100))
 ) $collate;
 CREATE TABLE {$wpdb->prefix}woocommerce_order_items (
   order_item_id bigint(20) unsigned NOT NULL auto_increment,
diff --git a/plugins/woocommerce/includes/react-admin/wc-admin-update-functions.php b/plugins/woocommerce/includes/react-admin/wc-admin-update-functions.php
index b0dcd66e3c..433e5c0985 100644
--- a/plugins/woocommerce/includes/react-admin/wc-admin-update-functions.php
+++ b/plugins/woocommerce/includes/react-admin/wc-admin-update-functions.php
@@ -295,3 +295,15 @@ function wc_update_1040_add_idx_date_paid_status_parent() {
 		$wpdb->query( "ALTER TABLE {$wpdb->prefix}wc_order_stats ADD INDEX idx_date_paid_status_parent (date_paid, status, parent_id)" );
 	}
 }
+
+/**
+ * Add an index to the woocommerce_downloadable_product_permissions table for (user_email) to improve anonymization/deletion performance.
+ */
+function wc_update_1050_add_idx_user_email() {
+	global $wpdb;
+	$index_exists = $wpdb->get_row( "SHOW INDEX FROM {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE key_name = 'idx_user_email'" );
+
+	if ( is_null( $index_exists ) ) {
+		$wpdb->query( "ALTER TABLE {$wpdb->prefix}woocommerce_downloadable_product_permissions ADD INDEX idx_user_email (user_email(100))" );
+	}
+}