- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大大改变了问题,由于我在 VPN 上而不是 MySQL 服务器的本地网络,所以我犯了错误,但问题仍然是这个查询太慢。我的完整查询现已包含在内,并且我正在添加连接表的所有布局。
此查询花费的时间太长,它确实返回一个大数据集,但限制数据集似乎没有帮助。我已经尝试过使用和不使用基于日期范围的 WHERE 。
仍然需要 8 秒或更长时间才能返回。使用 LIMIT 也没有什么区别。
我担心每个表中的记录可能太多,在这种情况下,我唯一的选择是创建一组“工作”表,其中包含过去几周的发货量,然后将它们移至一组,如果“历史”表,其中查询都会很慢。除非有人能找到一种方法来加快速度。谢谢。
SELECT
ShipmentHeader.RecNbr,
ShipmentHeader.Void,
ShipmentHeader.SONum,
ShipmentHeader.DateofReq,
ShipmentHeader.ShipToName,
ShipmentHeader.ShipToCity,
ShipmentHeader.ShipToState,
ShipmentHeader.ShipToZip,
ShipmentHeader.ShipToCountry,
Carrier.RecNbr AS CarrierRecNbr,
CarrierService.RecNbr AS CarrierServiceRecNbr,
ShipmentLabelsPrintLogView.Users
FROM
ShipmentHeader
INNER JOIN ShipmentLabels
ON ShipmentHeader.RecNbr = ShipmentLabels.HeaderRecNbr
LEFT JOIN VendorService
ON ShipmentLabels.VendorServiceRecNbr = VendorService.RecNbr
LEFT JOIN CarrierService
ON VendorService.CarrierServiceRecNbr = CarrierService.RecNbr
LEFT JOIN Carrier
ON CarrierService.CarrierRecNbr = Carrier.RecNbr
LEFT JOIN ShipmentLabelsPrintLogView
ON ShipmentLabels.RecNbr = ShipmentLabelsPrintLogView.ShipmentLabelsRecNbr
ORDER BY ShipmentHeader.RecNbr DESC
以下是表结构:
CREATE TABLE `ShipmentHeader` (
`RecNbr` int(11) NOT NULL AUTO_INCREMENT,
`Void` varchar(1) NOT NULL DEFAULT 'N',
`SONum` varchar(7) NOT NULL,
`User` varchar(6) NOT NULL,
`DateofReq` datetime NOT NULL,
`ShipToName` varchar(255) DEFAULT NULL,
`ShipToAddress1` varchar(255) DEFAULT NULL,
`ShipToAddress2` varchar(255) DEFAULT NULL,
`ShipToAddress3` varchar(255) DEFAULT NULL,
`ShipToCity` varchar(255) DEFAULT NULL,
`ShipToState` varchar(255) DEFAULT NULL,
`ShipToZip` varchar(255) DEFAULT NULL,
`ShipToCountry` varchar(255) DEFAULT NULL,
`PackageHeaderRecNbr` int(11) DEFAULT NULL,
`NegotiatedShipmentCharge` decimal(10,2) DEFAULT NULL,
`PublishedShipmentCharge` decimal(10,2) DEFAULT NULL,
`CustomerShipmentCharge` decimal(10,2) DEFAULT NULL,
`VoidTimeStamp` datetime DEFAULT NULL,
`VoidUser` varchar(50) DEFAULT NULL,
PRIMARY KEY (`RecNbr`),
KEY `SONum` (`SONum`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=539140 DEFAULT CHARSET=utf8
CREATE TABLE `ShipmentLabels` (
`RecNbr` int(11) NOT NULL AUTO_INCREMENT,
`Whse` varchar(3) DEFAULT NULL,
`HeaderRecNbr` int(11) NOT NULL,
`PackageRecNbr` int(11) NOT NULL,
`Carrier` varchar(60) NOT NULL DEFAULT '',
`Service` varchar(60) DEFAULT NULL,
`Charges` decimal(10,2) NOT NULL,
`RatedCost` decimal(10,2) NOT NULL,
`PublishedRate` decimal(10,2) NOT NULL,
`CustomerCharge` decimal(10,2) NOT NULL,
`Weight` int(11) NOT NULL,
`LabelFormat` varchar(30) NOT NULL DEFAULT '',
`ShipmentID` varchar(60) NOT NULL,
`TrackingNumber` varchar(60) NOT NULL DEFAULT '',
`Label` mediumtext NOT NULL COMMENT 'Base64 Encoded',
`DateofLabel` datetime NOT NULL,
`LabelSource` varchar(50) DEFAULT NULL,
`VendorServiceRecNbr` int(11) DEFAULT NULL,
PRIMARY KEY (`RecNbr`),
KEY `HeaderRecNbr` (`HeaderRecNbr`) USING BTREE,
KEY `PackageRecNbr` (`PackageRecNbr`) USING BTREE,
CONSTRAINT `ShipmentLabels_ibfk_1` FOREIGN KEY (`HeaderRecNbr`) REFERENCES `ShipmentHeader` (`RecNbr`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=542542 DEFAULT CHARSET=utf8
CREATE TABLE `VendorService` (
`RecNbr` int(11) NOT NULL AUTO_INCREMENT,
`CarrierServiceRecNbr` int(11) DEFAULT NULL,
`VendorRecNbr` int(11) DEFAULT NULL,
`VendorServiceCode` varchar(255) DEFAULT NULL,
`VendorServiceDesc` varchar(255) DEFAULT NULL,
`PackageType` varchar(60) DEFAULT NULL,
`LabelServiceCode` varchar(255) DEFAULT NULL,
`LabelPackageType` varchar(255) DEFAULT NULL,
PRIMARY KEY (`RecNbr`),
UNIQUE KEY `Unique` (`CarrierServiceRecNbr`,`VendorRecNbr`,`PackageType`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=196 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `CarrierService` (
`RecNbr` int(11) NOT NULL AUTO_INCREMENT,
`CarrierRecNbr` int(11) DEFAULT NULL,
`CarrierServiceCode` varchar(50) DEFAULT NULL,
`CarrierServiceDesc` varchar(255) DEFAULT NULL,
PRIMARY KEY (`RecNbr`),
UNIQUE KEY `unique` (`CarrierRecNbr`,`CarrierServiceCode`)
) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `Carrier` (
`RecNbr` int(11) NOT NULL AUTO_INCREMENT,
`CarrierName` varchar(50) DEFAULT NULL,
PRIMARY KEY (`RecNbr`),
UNIQUE KEY `unique` (`CarrierName`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
我正在加入我创建的这个 View ...这似乎就是问题所在...但是它所基于的表不是我在没有此 View 的情况下所需的数据格式。
CREATE ALGORITHM=UNDEFINED DEFINER=`atr`@`%` SQL SECURITY DEFINER VIEW `ShipmentLabelsPrintLogView`
AS
select `A`.`ShipmentLabelsRecNbr` AS `ShipmentLabelsRecNbr`,
(
select group_concat(distinct `ShipmentLabelsPrintLog`.`User`
order by `ShipmentLabelsPrintLog`.`User` ASC separator ', ')
from `ShipmentLabelsPrintLog`
where (`ShipmentLabelsPrintLog`.`ShipmentLabelsRecNbr` = `A`.`ShipmentLabelsRecNbr`)
) AS `Users`
from `ShipmentLabelsPrintLog` `A`
group by `A`.`ShipmentLabelsRecNbr`
View 所基于的表位于此处:
CREATE TABLE `ShipmentLabelsPrintLog` (
`RecNbr` int(11) NOT NULL AUTO_INCREMENT,
`ShipmentLabelsRecNbr` int(11) NOT NULL,
`User` varchar(10) NOT NULL,
`Workstation` varchar(20) NOT NULL,
`DateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`RecNbr`)
) ENGINE=InnoDB AUTO_INCREMENT=5908 DEFAULT CHARSET=utf8mb4;
解释如下:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY ShipmentHeader index PRIMARY 4 1979351
1 PRIMARY ShipmentLabels ref HeaderRecNbr HeaderRecNbr 4 Shipping.ShipmentHeader.RecNbr 1
1 PRIMARY VendorService eq_ref PRIMARY PRIMARY 4 Shipping.ShipmentLabels.VendorServiceRecNbr 1 Using where
1 PRIMARY CarrierService eq_ref PRIMARY PRIMARY 4 Shipping.VendorService.CarrierServiceRecNbr 1 Using where
1 PRIMARY Carrier eq_ref PRIMARY PRIMARY 4 Shipping.CarrierService.CarrierRecNbr 1 Using where; Using index
1 PRIMARY <derived2> ref key0 key0 5 Shipping.ShipmentLabels.RecNbr 10 Using where
2 DERIVED A ALL 6576 Using temporary; Using filesort
3 DEPENDENT SUBQUERY ShipmentLabelsPrintLog ALL 6576 Using where
有没有办法更快地获得相同的结果?
谢谢!
最佳答案
ShipmentLabelsPrintLog
需要 INDEX(ShipmentLabelsRecNbr, User)
除非您确实需要,否则不要使用LEFT
。在您的情况下,它似乎阻止优化器从依赖子查询开始。
关于mysql - 优化MySQL结构和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59164280/
我有三张 table 。表 A 有选项名称(即颜色、尺寸)。表 B 有选项值名称(即蓝色、红色、黑色等)。表C通过将选项名称id和选项名称值id放在一起来建立关系。 我的查询需要显示值和选项的名称,而
在mysql中,如何计算一行中的非空单元格?我只想计算某些列之间的单元格,比如第 3-10 列之间的单元格。不是所有的列...同样,仅在该行中。 最佳答案 如果你想这样做,只能在 sql 中使用名称而
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在为版本7.6进行Elasticsearch查询 我的查询是这样的: { "query": { "bool": { "should": [ {
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
是否可以编写一个查询来检查任一子查询(而不是一个子查询)是否正确? SELECT * FROM employees e WHERE NOT EXISTS (
我找到了很多关于我的问题的答案,但问题没有解决 我有表格,有数据,例如: Data 1 Data 2 Data 3
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
我从 EditText 中获取了 String 值。以及提交查询的按钮。 String sql=editQuery.getText().toString();// SELECT * FROM empl
我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。 所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000
这是我第一次使用 Stack Overflow,所以我希望我以正确的方式提出这个问题。 我有 2 个 SQL 查询,我正在尝试比较和识别缺失值,尽管我无法将 NULL 字段添加到第二个查询中以识别缺失
什么是动态 SQL 查询?何时需要使用动态 SQL 查询?我使用的是 SQL Server 2005。 最佳答案 这里有几篇文章: Introduction to Dynamic SQL Dynami
include "mysql.php"; $query= "SELECT ID,name,displayname,established,summary,searchlink,im
我有一个查询要“转换”为 mysql。这是查询: select top 5 * from (select id, firstName, lastName, sum(fileSize) as To
通过我的研究,我发现至少从 EF 4.1 开始,EF 查询上的 .ToString() 方法将返回要运行的 SQL。事实上,这对我来说非常有用,使用 Entity Framework 5 和 6。 但
我在构造查询来执行以下操作时遇到问题: 按activity_type_id过滤联系人,仅显示最近事件具有所需activity_type_id或为NULL(无事件)的联系人 表格结构如下: 一个联系人可
如何让我输入数据库的信息在输入数据 5 分钟后自行更新? 假设我有一张 table : +--+--+-----+ |id|ip|count| +--+--+-----+ |
我正在尝试搜索正好是 4 位数字的 ID,我知道我需要使用 LENGTH() 字符串函数,但找不到如何使用它的示例。我正在尝试以下(和其他变体)但它们不起作用。 SELECT max(car_id)
我有一个在 mysql 上运行良好的 sql 查询(查询 + 连接): select sum(pa.price) from user u , purchase pu , pack pa where (
我是一名优秀的程序员,十分优秀!