- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个相当大的查询,运行速度非常慢。开始时大约需要15分钟。然后我添加了所有适当的索引并将其降低到 30 秒。这是昨天的事了。今天,我添加了 2 个新连接,实际上将一些 LEFT JOIN
更改为 INNER
,现在运行需要 20 多分钟。
这是查询的EXPLAIN
。我将 Excel 文件上传到 SkyDrive,其中包含结果:http://cid-a32b31fdac0efced.office.live.com/view.aspx/mysqlexplain.xlsx
您将在这里看到有一个表 mwd,它说它没有键。我已经检查过该表,它确实附加了适当的索引。但是,这不是我添加到连接的表,并且昨天运行良好。
我创建的新连接可以在第 28 和 29 行看到。
任何帮助将不胜感激。
编辑:编辑:我再次运行查询,但没有 mwd
表中的字段,即。 BIR3M
、dealer_code
、country_code
、dsm_dealer_number
、location_number
、dms_type
、sequence_number
、version_no_edr
、id_dms_type
、version_no_dms
、version_date_dms
和现在只需 4 秒即可运行! (它仍在加入此表)
我知道它无法找到 mwd
的键,即使正确字段上有索引,那么我该怎么办?
编辑:并不是真的想发布查询,工作内容。但这是连接的第一部分,导致了延迟。好长啊...
SELECT mwd.dealer_code AS "BIR3M",
vm.chassis_number AS "VIN",
vm.Vehicle_ID,
vm.Registration,
COALESCE(vm.After_sale_type, "") AS "After Sales Type",
COALESCE(vm.Fabrication_No, "") AS "Fabrication No",
I.created_date AS "InvoiceDate",
I.department_id,
COALESCE(C.claim_number, "") AS "Intervention ID",
wb.booking_id AS "Booking ID",
wb.booking_date_time AS "Booking Date",
iba.account AS "Account Number",
acc.account_name AS "Account Description",
ibi.warranty_percentage AS "Payee Responsibility %",
IF(I.iscredit = 1, I.invoice_number, COALESCE(I2.invoice_number, "")) AS "Invoice Number",
IF(I.iscredit = 1, COALESCE(I2.invoice_number, "") , "") AS "Original Invoice Number",
"" AS "Part Reference",
"" AS "Part Description",
ibi.Booking_Time AS "Quantity",
0 AS "Cause Indicator",
"" AS "Stock Status",
ROUND(
(
CASE WHEN iBI.Claimed_Flag = 1 THEN (ibi.booking_time * ibi.warranty_labour_rate)
#(iBI.Claimed_Value * iBI.warranty_Labour_Rate)
WHEN iBi.Claimed_Flag = 0 THEN ibi.booking_time
#(iBI.Claimed_Value)
END
) # End
* CASE WHEN I.iscredit = 1 THEN -1 ELSE 1 END
,2) AS "RetailPrice",
ibia.discount AS "Discount Rate",
0.00 AS "Surcharge Rate",
ROUND(
ibi.Booking_Time * ibi.warranty_labour_rate * (1 - ibia.discount / 100) *
COALESCE(mwc.commercial_cont, 100) / 100 , 2)
AS "Cost Before Tax",
iba.account AS "Account",
CASE
WHEN ibi.warranty_percentage > 0 THEN "Warranty"
WHEN act.generic_type = 0 THEN "External"
WHEN act.generic_type = 1 THEN "Vehicle"
WHEN act.generic_type = 2 THEN "Internal"
WHEN act.generic_type = 3 THEN "Non Productive"
END AS "AccountType",
ibi.booking_time AS "Labour Time",
ibi.warranty_labour_rate AS "Hourly Rate",
0.00 AS "VAT Rate",
0.00 AS "VAT Total",
IBI.id AS "Invoice Booking Item ID",
IBI.operation_code AS "OPECOD",
IBI.job_description AS "Description",
CASE WHEN i.iscredit = 1 THEN 9 ELSE 0 END AS "Accounts Allocation",
COALESCE(mwc.contract_card_no, "") AS "Contract Card No",
COALESCE(mwc.vehicle_mileage, "") AS "Mileage",
COALESCE(mwc.delivery_date, "") AS "Delivery Date",
COALESCE(mwc.vo_number, "") AS "VO Number",
COALESCE(mwc.expense_code, "") AS "Expense Code",
COALESCE(mwc.catalog_function, "") AS "Catalog Function",
COALESCE(mwc.customer_complaint, "") AS "Customer Complaint",
COALESCE(mwc.commercial_cont, 100) AS "Commercial Contribution",
COALESCE(mwc.ots_otc_no, "") AS "OTS/OTC No",
COALESCE(mwc.supplier_code, "") AS "Supplier Code",
COALESCE(mwc.paint_code, "") AS "Paint Code",
COALESCE(mwc.off_road_breakdown, "") AS "Off Road Breakdown",
COALESCE(mwc.approval_no, "") AS "Approval No",
COALESCE(mwc.assistance_number, "") AS "Assistance Number",
COALESCE(mwc.customer_complaint_comment, "") AS "Customer Complaint Comment",
wb.booking_id AS "Repair Order Number",
wb.booking_date_time AS "Repair Order Date",
mwd.dealer_code,
mwd.country_code,
mwd.dsm_dealer_number,
mwd.location_number,
mwd.dms_type,
mwd.sequence_number,
mwd.version_no_edr,
mwd.id_dms_type,
mwd.version_no_dms,
mwd.version_date_dms,
COALESCE(mwc.customer_satisfied, "") AS "Customer Satisfied",
COALESCE(mwc.dealer_satisfied, "") AS "Dealer Satisfied",
COALESCE(mwc.parts_invoice_no, "") AS "Parts Invoice Number",
"" AS "Parts Type",
"" AS "Packaging Code",
CASE WHEN cr.Contact_ID IS NOT NULL THEN "P"
WHEN br.Business_ID IS NOT NULL THEN "S"
WHEN d.CODE IS NOT NULL THEN "S"
END AS "Customer Type",
"P" AS "Customer Vehicle Relation",
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Surname
WHEN br.Business_ID IS NOT NULL THEN br.Company_Name
WHEN d.CODE IS NOT NULL THEN d.Description
END AS "Surname/Corporate Name",
"GB" AS "Language",
COALESCE(cr.Surname, "") AS "Second Name",
COALESCE(cr.Forename, "") AS "First Name",
COALESCE(cr.Date_Of_Birth, "") AS "DOB",
COALESCE(cr.Title, "") AS "Title",
COALESCE(vm.Registration_Date, "") AS "Registration Date",
CASE WHEN cr.Contact_ID IS NOT NULL THEN IF(cr.Letter_Contact_Allowed = 1, "", "A")
WHEN br.Business_ID IS NOT NULL THEN IF(br.Letter_Contact_Allowed = 1, "", "A")
WHEN d.CODE IS NOT NULL THEN ""
END AS "Mail Contact",
CASE WHEN cr.Contact_ID IS NOT NULL THEN IF(cr.EMail_Contact_Allowed = 1, "", "E")
WHEN br.Business_ID IS NOT NULL THEN IF(br.EMail_Contact_Allowed = 1, "", "E")
WHEN d.CODE IS NOT NULL THEN ""
END AS "EMail Contact",
CASE WHEN cr.Contact_ID IS NOT NULL THEN IF(cr.Fax_Contact_Allowed = 1, "", "F")
WHEN br.Business_ID IS NOT NULL THEN IF(br.Fax_Contact_Allowed = 1, "", "F")
WHEN d.CODE IS NOT NULL THEN ""
END AS "Fax Contact",
CASE WHEN cr.Contact_ID IS NOT NULL THEN IF(cr.Telephone_Contact_Allowed = 1, "", "T")
WHEN br.Business_ID IS NOT NULL THEN IF(br.Telephone_Contact_Allowed = 1, "", "T")
WHEN d.CODE IS NOT NULL THEN ""
END AS "Telephone Contact",
COALESCE(CASE WHEN cr.Contact_ID IS NOT NULL THEN
CASE WHEN cr.Preferred_Contact_Method = 1 THEN "A"
WHEN cr.Preferred_Contact_Method = 2 THEN "E"
WHEN cr.Preferred_Contact_Method = 9 THEN "F"
WHEN cr.Preferred_Contact_Method = 5 THEN "T"
END
WHEN br.Business_ID IS NOT NULL THEN
CASE WHEN br.Preferred_Contact_Method = 1 THEN "A"
WHEN br.Preferred_Contact_Method = 2 THEN "E"
WHEN br.Preferred_Contact_Method = 9 THEN "F"
WHEN br.Preferred_Contact_Method = 5 THEN "T"
END
WHEN d.CODE IS NOT NULL THEN "E"
END, "") AS "Preferred Support Type",
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Address_1
WHEN br.Business_ID IS NOT NULL THEN br.Address_1
WHEN d.CODE IS NOT NULL THEN ""
END AS "Street Name",
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Postcode
WHEN br.Business_ID IS NOT NULL THEN br.Postcode
WHEN d.CODE IS NOT NULL THEN ""
END AS "Post Code",
"GBR" AS Country,
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Address_2
WHEN br.Business_ID IS NOT NULL THEN br.Address_2
WHEN d.CODE IS NOT NULL THEN ""
END AS "Address 1",
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Address_3
WHEN br.Business_ID IS NOT NULL THEN br.Address_3
WHEN d.CODE IS NOT NULL THEN ""
END AS "Address 2",
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Address_4
WHEN br.Business_ID IS NOT NULL THEN br.Address_4
WHEN d.CODE IS NOT NULL THEN ""
END AS "Address 3",
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Email_Address
WHEN br.Business_ID IS NOT NULL THEN br.Email_Address
WHEN d.CODE IS NOT NULL THEN ""
END AS "Email",
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Tel_num_home
WHEN br.Business_ID IS NOT NULL THEN br.Tel_num_primary
WHEN d.CODE IS NOT NULL THEN ""
END AS "Phone Number 1",
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Tel_num_mobile
WHEN br.Business_ID IS NOT NULL THEN br.Tel_num_secondary
WHEN d.CODE IS NOT NULL THEN ""
END AS "Phone Number 2",
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Tel_num_business
WHEN br.Business_ID IS NOT NULL THEN br.Tel_num_mobile
WHEN d.CODE IS NOT NULL THEN ""
END AS "Phone Number 3",
CASE WHEN cr.Contact_ID IS NOT NULL THEN cr.Fax_num
WHEN br.Business_ID IS NOT NULL THEN br.Fax_num
WHEN d.CODE IS NOT NULL THEN ""
END AS "Fax Number",
wb.Owner_ID AS "Owner",
1 AS "Labour Flag",
"WARRANTY"
FROM
I
INNER JOIN iba ON I.monetary_transaction_id = iba.monetary_transaction_id
INNER JOIN ibi ON ibi.booking_id = iba.booking_id AND ibi.job_group = iba.job_group AND ibi.sequence = iba.sequence
INNER JOIN G ON G.Booking_item_id= Ibi.ID
AND g.Type_ID = 1
INNER JOIN C ON C.ID = G.Claim_Booking_claim_ID
INNER JOIN WM ON WM.Warranty_Booking_Claim_ID = C.ID
INNER JOIN mwc ON mwc.ID = WM.Manufacturer_Warranty_Claim_ID
INNER JOIN ibia ON ibia.booking_item_id = ibi.id
AND ibia.sequence = ibi.sequence AND ibia.booking_account_id = iba.id AND ibia.sequence = iba.sequence
INNER JOIN wb ON wb.booking_id = ibi.booking_id
INNER JOIN a ON a.account_id = iba.account
INNER JOIN act ON act.type = a.type
LEFT JOIN ibev ON ibev.booking_item_id = ibi.id AND ibi.sequence = ibev.sequence
INNER JOIN vm ON wb.vehicle_id = vm.vehicle_id
INNER JOIN mwd ON mwd.department_id = I.department_id
INNER JOIN mt ON I.monetary_transaction_id = mt.master_monetary_transaction_id
INNER JOIN I2 ON mt.id = I2.monetary_transaction_id
INNER JOIN acc ON iba.account = acc.account_id
LEFT JOIN cr ON wb.owner_id = cr.contact_id
LEFT JOIN br ON wb.owner_id = br.business_id
LEFT JOIN d ON wb.owner_id = d.code
WHERE I.department_id IN (120, 322, 362)
AND I.created_date BETWEEN '2011-03-01 00:00:00' AND '2011-03-02 23:59:59'
AND ibev.booking_item_id IS NULL AND NOT ibi.booking_item_type_id IN (10,14) AND ibi.warranty_percentage > 0
AND wb.booking_id IN (454017, 454019, 454021, 454031)
最佳答案
每当您的查询涉及如此多的表时,通常都会出现设计问题。撇开这一点不谈,我注意到您混合了左(外)连接和内连接。
除非表之间存在特定的依赖关系,例如
A LEFT JOIN B on (a..b) INNER JOIN C on (c..b)
(C 必须在 b 之后)
您应该尽早将所有 INNER JOIN 组合在一起,例如而不是
A LEFT JOIN B on (a..b) INNER JOIN C on (c..a)
写成
A INNER JOIN C on (c..a) LEFT JOIN B on (a..b)
这将帮助优化器首先处理 INNER JOIN,这可能会减少行数。根据定义,LEFT JOIN 会保留前面表中的所有行,因此优化器通常会稍后处理这些后续表。
关于MySQL 查询运行速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5340770/
目前我正在构建相当大的网络系统,我需要强大的 SQL 数据库解决方案。我选择 Mysql 而不是 Postgres,因为一些任务需要只读(MyISAM 引擎)而其他任务需要大量写入(InnoDB)。
我在 mysql 中使用如下命令。当它显示表格数据时,它被格式化为一个非常干净的表格,间距均匀且 |作为列分隔符。 SELECT * FROM TABLE_NAME; 当我从 CLI 运行命令时,如下
我知道这个问题之前已经被问过好几次了,我已经解决了很多问题,但到目前为止没有任何效果。 MySQL 试图将自身安装到的目录 (usr/local/mysql) 肯定有问题。关于我的错误的奇怪之处在于我
以下是我的 SQL 数据结构,我正在尝试如下两个查询: Select Wrk_ID, Wrk_LastName, Skill_Desc from Worker, Skill where
我们有一个本地 mysql 服务器(不在公共(public)域上),并希望将该服务器复制到我们拥有的 google 云 sql 实例。我的问题是:1.这可能吗?2.我们的本地服务器只能在本地网络上访问
我有一个表(test_table),其中一些字段值(例如字段 A、B 和 C)是从外部应用程序插入的,还有一个字段(字段 D),我想从现有表(store_table)插入其值,但在插入前者(A、B 和
我想创建一个 AWS RDS 实例,然后使用 terraform 管理数据库用户。因此,首先,我创建了一个 RDS 实例,然后使用创建的 RDS 实例初始化 mysql 提供程序,以进一步将其用于用户
当用户在我的网站上注册时,他们会在我的一个数据库中创建自己的表格。该表存储用户发布的所有帖子。我还想做的是也为他们生成自己的 MySql 用户——该用户仅有权从他们的表中读取、写入和删除。 创建它应该
我有一个关于 ColdFusion 和 Mysql 的问题。我有两个表:PRODUCT 和 PRODUCT_CAT。我想列出包含一些标记为:IS_EXTRANET=1 的特殊产品的类别。所以我写了这个
我想获取 recipes_id 列的值,以获取包含 ingredient_id 的 2,17 和 26 条目的值。 假设 ingredient_id 2 丢失则不获取记录。 我已经尝试过 IN 运算符
在 Ubuntu 中,我通常安装两者,但 MySQL 的客户端和服务器之间有什么区别。 作为奖励,当一个新语句提到它需要 MySQL 5.x 时,它是指客户端、服务器还是两者兼而有之。例如这个链接ht
我重新访问了我的数据库并注意到我有一些 INT 类型的主键。 这还不够独特,所以我想我会有一个指导。 我来自微软 sql 背景,在 ssms 中你可以 选择类型为“uniqeidentifier”并自
我的系统上有 MySQL,我正在尝试确定它是 Oracle MySQL 还是 MySQL。 Oracle MySQL 有区别吗: http://www.oracle.com/us/products/m
我是在生产 MySQL 中运行的应用程序的新维护者。之前的维护者已经离开,留下的文档很少,而且联系不上了。 我面临的问题是执行以下请求大约需要 10 秒: SELECT COUNT(*) FROM `
我有两个位于不同机器上的 MySQL 数据库。我想自动将数据从一台服务器传输到另一台服务器。比方说,我希望每天早上 4:00 进行数据传输。 可以吗?是否有任何 MySQL 内置功能可以让我们做到这一
有什么方法可以使用 jdbc 查询位于 mysql 根目录之外的目录中的 mysql 表,还是必须将它们移动到 mysql 根目录内的数据库文件夹中?我在 Google 上搜索时没有找到任何东西。 最
我在 mysql 数据库中有两个表。成员和 ClassNumbers。两个表都有一个付费年份字段,都有一个代码字段。我想用代码数字表中的值更新成员表中的付费年份,其中成员中的代码与 ClassNumb
情况:我有 2 台服务器,其中一台当前托管一个实时 WordPress 站点,我希望能够将该站点转移到另一台服务器,以防第一台服务器出现故障。传输源文件很容易;传输数据库是我需要弄清楚如何做的。两台服
Phpmyadmin 有一个功能是“复制数据库到”..有没有mysql查询来写这个函数?类似于将 db A 复制到新的 db B。 最佳答案 首先创建复制数据库: CREATE DATABASE du
我有一个使用 mySQL 作为后端的库存软件。我已经在我的计算机上对其进行了测试,并且运行良好。 当我在计算机上安装我的软件时,我必须执行以下步骤: 安装 mySQL 服务器 将用户名指定为“root
我是一名优秀的程序员,十分优秀!