# 항목의 QTY 합계를 월로 설정하려면 쿼리를 가져 오는 데 너무 오래 걸립니다 (15-20 초).더 나은 MySQL 쿼리 성능
- 총 행 : 1,495,873 - 총 반입 행 : 9-12
두 테이블 (invoice_header
및 invoice_detail
)의 관계가 (일대)에 invoice_header
만에 인보이스의 헤더임을 합계. 위치 ID (loc_id
) 및 송장 번호 (invo_no
)를 사용하여 각 위치에 고유 한 일련 번호가있는 invoice_detail에 연결됩니다. 송장 세부 사항에는 각 송장의 세부 사항이 들어 있습니다.
SELECT SUM(invoice_detail.qty) AS qty, Month(invoice_header.date) AS month
FROM invoice_detail
JOIN invoice_header ON invoice_detail.invo_no = invoice_header.invo_no
AND invoice_detail.loc_id = invoice_header.loc_id
WHERE invoice_detail.item_id = {$itemId}
GROUP BY Month(invoice_header.date)
ORDER BY Month(invoice_header.date)
가 설명해
invoice_header 테이블 구조 :
CREATE TABLE `invoice_header` (
`invo_type` varchar(1) NOT NULL,
`invo_no` int(20) NOT NULL AUTO_INCREMENT,
`invo_code` varchar(50) NOT NULL,
`date` date NOT NULL,
`time` time NOT NULL,
`cust_id` int(11) NOT NULL,
`loc_id` int(3) NOT NULL,
`cash_man_id` int(11) NOT NULL,
`sales_man_id` int(11) NOT NULL,
`ref_invo_no` int(20) NOT NULL,
`total_amount` decimal(19,2) NOT NULL,
`tax` decimal(19,2) NOT NULL,
`discount_amount` decimal(19,2) NOT NULL,
`net_value` decimal(19,2) NOT NULL,
`split` decimal(19,2) NOT NULL,
`qty` int(11) NOT NULL,
`payment_type_id` varchar(20) NOT NULL,
`comments` varchar(255) NOT NULL,
PRIMARY KEY (`invo_no`,`loc_id`)
) ENGINE=InnoDB AUTO_INCREMENT=20286 DEFAULT CHARSET=utf8
을
은 그것의 여기, 해당 쿼리의 성능을 향상시킬 수있는 더 좋은 방법이 있나요
,invoice_detail 테이블 구조 :
이CREATE TABLE `invoice_detail` (
`invo_no` int(11) NOT NULL,
`loc_id` int(3) NOT NULL,
`serial` int(11) NOT NULL,
`item_id` varchar(11) NOT NULL,
`size_id` int(5) NOT NULL,
`qty` int(11) NOT NULL,
`rtp` decimal(19,2) NOT NULL,
`type` tinyint(1) NOT NULL,
PRIMARY KEY (`invo_no`,`loc_id`,`serial`),
KEY `item_id` (`item_id`),
KEY `size_id` (`size_id`),
KEY `invo_no` (`invo_no`),
KEY `serial` (`serial`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1. 쿼리에서 모든 테이블에 대한 스키마 게시 2. 'EXPLAIN' 3. 통계 (전체 행, 필터링 된 행, 인덱스 카디널리티, "너무 길다"등의 정의) – zerkms
Ok @zerkms가 업데이트됩니다. 2 테이블의 구조를 가진 포스트. – CairoCoder
대신'SHOW CREATE TABLE'을 사용하여 인덱스와 같은 모든 것을 포함 시켰습니다. 또한 - ** 모든 3 ** 항목은 ** 당신을 도울 ** 필요합니다 **. 내가 농담하고 부적절한 정보를 묻는 것만 큼은 아니지만, 당신을 도울 필수 요소입니다. – zerkms