최상의 성능을 얻으려면이 작업을 어떻게 수행 하시겠습니까?SELECT 절의 MySQL 계산 필드 재사용
테이블 스키마 :
CREATE TABLE `test_truck_report` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`truck_id` INT(11) NOT NULL,
`odometer_initial` INT(11) NOT NULL,
`odometer_final` INT(11) NOT NULL,
`fuel_initial` INT(11) NOT NULL,
`fuel_final` INT(11) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB;
내가 뭘 실행 노력하고있어이 쿼리입니다 : 어떻게 든
SELECT
truck_id,
(odometer_final - odometer_initial) AS mileage,
(fuel_initial - fuel_final) AS consumed_fuel,
(consumed_fuel/mileage) AS consumption_per_km
FROM
test_truck_report
WHERE
consumption_per_km > 2
작동하지 않습니다 첫눈 로직에이 명백하고 난 강제로 해요 대신이 쿼리를 사용하십시오 :
SELECT
truck_id,
(odometer_final - odometer_initial) AS mileage,
(fuel_initial - fuel_final) AS consumed_fuel,
((fuel_initial - fuel_final)/(odometer_final - odometer_initial)) AS consumption_per_km
FROM
test_truck_report
WHERE
((fuel_initial - fuel_final)/(odometer_final - odometer_initial)) > 2
나는 계산 된 각 필드의 상수 재 계산 중요한 성능 저하를 초래합니다. 그리고 이것은 단지 테스트 케이스이며, 실제 작업 테이블은 50 개 이상의 필드를 가지고 있으며 계산 된 필드 중 일부는 10 개 이상의 피연산자로 구성됩니다. 그래서 지금은 정말 큰 문제입니다. 실제로 같은 이러한 필드를 만들고 수행하지 않으려는 이유
이유 :
UPDATE
`test_truck_report`
SET
consumed_fuel = fuel_initial - fuel_final
는 기존 레코드가 지속적으로 사용자가 업데이트되고 있으며,이 경우 내가 지속적으로 해당 업데이트 할 필요가 있다는 것입니다 데이터. 실제 필드를 만드는 것이 더 좋은 아이디어라고 생각하십니까? 아니면 더 좋은 방법이 있습니까?
감사합니다.
CREATE OR REPLACE VIEW vw_truck_data AS
SELECT truck_id,
(odometer_final - odometer_initial) AS mileage,
(fuel_initial - fuel_final) AS consumed_fuel
FROM test_truck_report;
그리고 마지막보기 : 당신이 쉽게 읽을 수에서 원할 때마다
이제CREATE OR REPLACE VIEW vw_truck_consumption AS
SELECT data.*,
(data.consumed_fuel/data.mileage) AS consumption_per_km
FROM vw_truck_data data;
당신이 조회 할 수 있습니다
우리는 보조보기가 필요합니다
SELECT 문에 대한 [HAVING'] (http://dev.mysql.com/doc/refman/5.7/en/select.html) 절을보십시오. 이것은 열 이름과 "계산 된 값"을 사용합니다. –