다른 ID를 가진 종류의 여러 행으로 구성된 테이블이 있습니다. (종류는 많으며 ID는 고유하며 두 열 모두 색인이 생성됩니다.) 이제 각 종류의 ID가 가장 높은 두 가지를 선택해야합니다. 내가하는 일은 다음과 같습니다.MySQL : 가장 높은 ID를 가진 모든 두 개의 종류 선택
select max(c.id), max(d.id) from theTable c left join
theTable d on c.id > d.id and c.kind=d.kind
where c.id > constant group by c.kind;
위의 쿼리는 성능이 뛰어나지 만 큰 놀라움은 아닙니다. 필자는 그것의 빠른 버전 ...
select c.id, max(d.id) from (select max(id) id, kind from theTable
where id > constatnt group by kind) c left join
theTable d on c.id > d.id and c.kind=d.kind group by c.kind;
을 알아 낸 ....하지만 여전히 동일한 결과를 달성하기 위해보다 효율적인 방법이 있나요 충분히 빨리
하지? 감사합니다. 는
편집 : 내 작업이 각 종류의 현재 값 및 이전의 것들을 얻을 표현식의 일부로 비교하는 것입니다, 그래서 theTbale는 역사 테이블 (논리 연산을, 합체, IFS 등) 및
+-----------+-----------+ | max(c.id) | max(d.id) | +-----------+-----------+ | 1747 | NULL | | 1701 | 1432 | | 1703 | 1434 | | 1706 | 1437 | | 1707 | 1438 | | 1751 | NULL | | 1713 | 1444 | | 1750 | NULL | | 1709 | 1440 | | 1742 | 1741 | | 1711 | 1442 | | 1746 | 1745 | | 1708 | 1439 | | 1719 | 1450 | | 1725 | 1456 | | 1723 | 1454 | | 1740 | 1733 | | 1705 | 1436 | | 1702 | 1433 | | 1749 | 1748 | | 1712 | 1443 | | 1718 | 1449 | | 1722 | 1453 | | 1728 | 1459 | | 1721 | 1452 | | 1739 | 1731 | | 1714 | 1445 | | 1717 | 1448 | | 1716 | 1447 | | 1724 | 1455 | | 1710 | 1441 | | 1727 | 1458 | | 1720 | 1451 | | 1738 | NULL | | 1715 | 1446 | | 1704 | 1435 | | 1726 | 1457 | | 1758 | 1757 | +-----------+-----------+
외부 결합에 대한 이유가 없습니다. –
더 빨라지겠습니까? –
샘플 데이터와 예상 결과를 게시 할 수 있습니까? 당신의 임무는 명확하지 않습니다. 성능 (대용량 데이터 세트의 경우)은 종종 테이블 인덱싱에 의존합니다. 어떤 색인이 있습니까? –