【发布时间】:2019-03-30 00:11:12
【问题描述】:
我已经设置了一些表并运行了一个查询。但是,在我的解释中,SQL 会导致生成一个临时表(我认为这是因为 GROUP BY)
我添加了一些索引来加快查询速度,但想知道是否有办法停止使用临时表,是否有其他方法可以使用索引加快查询速度?
购物车数据
CREATE TABLE `cartdata` (
`IDCartData` INT(11) NOT NULL AUTO_INCREMENT,
`CartOrderref` VARCHAR(25) NOT NULL DEFAULT '',
`UserID` INT(11) NOT NULL DEFAULT '0',
`LastUpdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
`ManualContactName` VARCHAR(100) NOT NULL DEFAULT '',
`ManualOrderConfirmationEmail` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`IDCartData`),
INDEX `CartOrderref` (`CartOrderref`)
)
CartSplitData
CREATE TABLE `cartsplitdata` (
`IDCartSupplierData` INT(11) NOT NULL AUTO_INCREMENT,
`IDCartData` INT(11) NOT NULL DEFAULT '0',
`supplierid` INT(11) NOT NULL DEFAULT '0',
`DeliveryDate` DATE NOT NULL DEFAULT '2000-01-01',
`AccountNumber` VARCHAR(50) NOT NULL DEFAULT '',
`ManualOrderref` VARCHAR(50) NOT NULL DEFAULT '',
`lastupdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`IDCartSupplierData`),
INDEX `cartdatasupplierid` (`IDCartData`, `supplierid`)
)
我的示例查询
EXPLAIN SELECT max(CartData.idCartDATA) AS idCartDATA , CartData.*, CartSplitData.*
FROM CartData
JOIN CartSplitData ON CartSplitData.IDCartDATA = CartDATA.IDCartData
WHERE CartData.CartOrderref = 'XXXXXXXXX'
group by CartSplitData.SUPPLIERID
【问题讨论】:
-
您的查询没有意义。
group by和select不兼容。 -
@GordonLinoff 是的......我现在可以看到......我的逻辑有缺陷,感谢您发现这一点。
-
那你为什么不删除这个请求呢?
-
下面的答案实际上确实达到了我想要的效果,很高兴我没有删除请求!
标签: mysql performance indexing group-by query-performance