MySQL 问题。
我有一份合同和订单文件。标准的父母和孩子 - 一对多的关系。一份合约可以有很多订单。公共连接字段是 c_contract_id = co_contract_id。
合同具有限定合同的 c_type_code,订单也具有 co_order_type_code。
我正在构建一个通用搜索,允许用户根据许多字段进行选择。给我带来麻烦的查询是在 contract 或 contract_orders 表中查找具有特定 type_code 的那些合约的 contract_ids。
表中有许多字段可供用户搜索。我的问题的相关领域是:
CREATE TABLE `ndx_contracts` (
`c_contract_id` int(11) NOT NULL AUTO_INCREMENT,
`c_type_code` char(2) NOT NULL,
PRIMARY KEY (`c_contract_id`),
KEY `c_type_code` (`c_type_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1
CREATE TABLE `ndx_contract_orders` (
`co_contract_id` int(11) NOT NULL,
`co_contract_orderid` int(11) NOT NULL AUTO_INCREMENT,
`co_order_type_code` varchar(2) NOT NULL,
`co_data` varchar(255),
PRIMARY KEY (`co_contract_orderid`,`co_contractid`),
KEY `co_order_type_code` (`co_order_type_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1
SELECT count(1)
FROM contracts
WHERE
c_type_code IN ('02')
OR (
(SELECT count(co_order_type_code) FROM contract_orders
WHERE
co_contract_id = c_contract_id
AND co_order_type_code IN ('02')
) > 0
)
;
此查询有效,但速度非常慢。我只有大约 40,000 份合约,每份都有大约 4 条订单记录,搜索需要 311 秒才能返回 320 秒的行。
我会做一个外连接,但这会返回许多额外的行。
谢谢你