Простой внутренний Query Join Postmeta требует 2SEC для выполненияMySql

Форум по Mysql
Ответить
Anonymous
 Простой внутренний Query Join Postmeta требует 2SEC для выполнения

Сообщение Anonymous »

Сайт WordPress с около 150000 сообщений. У меня есть запрос, который выполняется несколько раз на страницу нагрузку, и он необоснованно медленный - в порядке 2 сек: < /p>
SELECT COUNT(*) as cnt
FROM wp_postmeta pm, wp_posts p
inner join wp_posts p2 on p2.ID = p.post_parent and p2.post_status in('order_paid', 'order_received')
WHERE p.ID = pm.post_id
AND ((p.post_status = 'publish'))
AND p.post_type = 'tc_tickets_instances'
AND pm.meta_key = 'ticket_type_id'
AND pm.meta_value IN (157404,157405,155353,155354,155355);

Я установил WP MySQL для Speed ​​Plugin, который создает новые составные индексы и что кажется , чтобы немного улучшить вещи. Запрос выполняется от 1,5 - 2,5 секунды «обычно», а страница, которую мы загружаем, используется, чтобы диапазон от 13 секунд до 24 секунды до плагина и от 8 с до 20 с после новые индексы создаются. /p>
Там нет ничего очевидного для решения, но, возможно, есть какая -то подлая техника, чтобы оптимизировать этот запрос, который я не нашел?
[! MySQL Workbench] [1]] [1] < /p>
'{ \"query_block\": {. \"select_id\": 1,
\"cost_info\": {
\"query_cost\": \"90915.83\"
},
\"nested_loop\": [
{
\"table\": {
\"table_name\": \"p\",
\"access_type\": \"ref\",
\"possible_keys\": [
\"PRIMARY\",
\"post_parent\",
\"type_status_date\"
],
\"key\": \"type_status_date\",
\"used_key_parts\": [
\"post_type\",
\"post_status\"
],
\"key_length\": \"164\",
\"ref\": [
\"const\",
\"const\"
],
\"rows_examined_per_scan\": 72012,
\"rows_produced_per_join\": 72012,
\"filtered\": \"100.00\",
\"cost_info\": {
\"read_cost\": \"10440.29\",
\"eval_cost\": \"7201.20\",
\"prefix_cost\": \"17641.49\",
\"data_read_per_join\": \"253M\"
},
\"used_columns\": [
\"ID\",
\"post_status\",
\"post_parent\",
\"post_type\"
]
}
},
{
\"table\": {
\"table_name\": \"p2\",
\"access_type\": \"eq_ref\",
\"possible_keys\": [
\"PRIMARY\"
],
\"key\": \"PRIMARY\",
\"used_key_parts\": [
\"ID\"
],
\"key_length\": \"8\",
\"ref\": [
\"motorco.p.post_parent\"
],
\"rows_examined_per_scan\": 1,
\"rows_produced_per_join\": 14402,
\"filtered\": \"20.00\",
\"cost_info\": {
\"read_cost\": \"52201.45\",
\"eval_cost\": \"1440.24\",
\"prefix_cost\": \"77044.14\",
\"data_read_per_join\": \"50M\"
},
\"used_columns\": [
\"ID\",
\"post_status\"
],
\"attached_condition\": \"(`motorco`.`p2`.`post_status` in (\'order_paid\',\'order_received\'))\"
}
},
{
\"table\": {
\"table_name\": \"pm\",
\"access_type\": \"ref\",
\"possible_keys\": [
\"PRIMARY\",
\"meta_key\",
\"meta_value\"
],
\"key\": \"PRIMARY\",
\"used_key_parts\": [
\"post_id\",
\"meta_key\"
],
\"key_length\": \"1030\",
\"ref\": [
\"motorco.p.ID\",
\"const\"
],
\"rows_examined_per_scan\": 1,
\"rows_produced_per_join\": 7580,
\"filtered\": \"50.00\",
\"cost_info\": {
\"read_cost\": \"12355.53\",
\"eval_cost\": \"758.08\",
\"prefix_cost\": \"90915.83\",
\"data_read_per_join\": \"7M\"
},
\"used_columns\": [
\"post_id\",
\"meta_key\",
\"meta_value\"
],
\"attached_condition\": \"(`motorco`.`pm`.`meta_value` in (157404,157405,155353,155354,155355))\"
}
}
]
}
}'
< /code>
Таблица defs: < /p>
CREATE TABLE `wp_postmeta` (
`meta_id` bigint unsigned NOT NULL AUTO_INCREMENT,
`post_id` bigint unsigned NOT NULL DEFAULT '0',
`meta_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`meta_value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci,
PRIMARY KEY (`post_id`,`meta_key`,`meta_id`),
UNIQUE KEY `meta_id` (`meta_id`),
KEY `meta_key` (`meta_key`,`meta_value`(32),`post_id`,`meta_id`),
KEY `meta_value` (`meta_value`(32),`meta_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1487185 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

CREATE TABLE `wp_posts` (
`ID` bigint unsigned NOT NULL AUTO_INCREMENT,
`post_author` bigint unsigned NOT NULL DEFAULT '0',
`post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`post_title` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`post_excerpt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`post_status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'publish',
`comment_status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'open',
`ping_status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'open',
`post_password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
`post_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
`to_ping` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`pinged` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_content_filtered` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`post_parent` bigint unsigned NOT NULL DEFAULT '0',
`guid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
`menu_order` int NOT NULL DEFAULT '0',
`post_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'post',
`post_mime_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
`comment_count` bigint NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `post_name` (`post_name`),
KEY `post_parent` (`post_parent`,`post_type`,`post_status`),
KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`post_author`),
KEY `post_author` (`post_author`,`post_type`,`post_status`,`post_date`)
) ENGINE=InnoDB AUTO_INCREMENT=159698 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

< /code>

[1]: https://i.sstatic.net/QurVFDnZ.png


Подробнее здесь: https://stackoverflow.com/questions/794 ... to-execute
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»