gpt4 book ai didi

php - Magento 查询速度慢

转载 作者:行者123 更新时间:2023-11-29 12:24:29 25 4
gpt4 key购买 nike

我有用于生成 sku 编号的代码,可以使用此查询查找现有 sku 表中的间隙。

SELECT t1.sku 
FROM catalog_product_entity t1
LEFT JOIN catalog_product_entity AS t2 ON CAST( t2.sku AS UNSIGNED ) = CAST( t1.sku AS UNSIGNED ) +1
WHERE t2.sku IS NULL
AND CAST( t1.sku AS UNSIGNED ) >100000
ORDER BY CAST( t1.sku AS UNSIGNED ) ASC
LIMIT 1

如果没有 Ordery By,则需要不到一秒的时间。下单后大约需要一分钟。有没有办法优化查询以加快加载速度?

表构建:

CREATE TABLE `catalog_product_entity` (  `entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Entity ID',  
`entity_type_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Entity Type ID',  
`attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Attribute Set ID',  
`type_id` varchar(32) NOT NULL DEFAULT 'simple' COMMENT 'Type ID',  
`sku` varchar(64) DEFAULT NULL COMMENT 'SKU',  
`created_at` timestamp NULL DEFAULT NULL COMMENT 'Creation Time',  `updated_at` timestamp NULL DEFAULT NULL COMMENT 'Update Time',  `has_options` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Has Options',  `required_options` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Required Options',  `absolute_price` tinyint(1) NOT NULL DEFAULT '0',  `absolute_weight` tinyint(1) NOT NULL DEFAULT '0',  PRIMARY KEY (`entity_id`),  KEY `IDX_CATALOG_PRODUCT_ENTITY_ENTITY_TYPE_ID` (`entity_type_id`),  KEY `IDX_CATALOG_PRODUCT_ENTITY_ATTRIBUTE_SET_ID` (`attribute_set_id`),  KEY `IDX_CATALOG_PRODUCT_ENTITY_SKU` (`sku`),  CONSTRAINT `FK_CAT_PRD_ENTT_ATTR_SET_ID_EAV_ATTR_SET_ATTR_SET_ID` FOREIGN KEY (`attribute_set_id`) REFERENCES `eav_attribute_set` (`attribute_set_id`) ON DELETE CASCADE ON UPDATE CASCADE,  CONSTRAINT `FK_CAT_PRD_ENTT_ENTT_TYPE_ID_EAV_ENTT_TYPE_ENTT_TYPE_ID` FOREIGN KEY (`entity_type_id`) REFERENCES `eav_entity_type` (`entity_type_id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB AUTO_INCREMENT=14950 DEFAULT CHARSET=utf8 COMMENT='Catalog Product Table'

最佳答案

CAST 是 killer 。

如果您想对数字进行算术运算并使用索引,请将值存储为数字。

ON function(indexed_column) ...

无法使用该列上的索引。 WHERE 子句中也是如此。

ORDER BY 必须找到所有可能的行并在交付行之前对它们进行排序(LIMIT 1)。 JOIN 必须完全扫描第二个表以查找第一个表中的每一行,因此花费了很长时间。

如果没有 ORDER BY,在满足 LIMIT 1 之前只需要一次这样的扫描。因此它的速度快得令人难以置信。 (但不如将 sku 声明为 INT 或 BIGINT 并且删除 CAST 时那么快。)

关于php - Magento 查询速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28548767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com