2014-06-16 3 views
0

테이블에 외래 키를 만들 때 색인이 자동으로 추가된다는 것을 알았습니다. 내 테이블에서테이블에서 인덱스를 올바르게 사용하는 방법은 무엇입니까?

:

CREATE TABLE `SupplierOrderGoods` (
    `shopOrder_id` INT(11) NOT NULL, 
    `supplierGood_id` INT(11) NOT NULL, 
    `count` INT(11) NOT NULL, 
    PRIMARY KEY (`shopOrder_id`, `supplierGood_id`), 
    CONSTRAINT `FK_SupplierOrderGoods_ShopOrders` FOREIGN KEY (`shopOrder_id`) REFERENCES `shoporders` (`id`), 
    CONSTRAINT `FK_SupplierOrderGoods_SupplierGoods` FOREIGN KEY (`supplierGood_id`) REFERENCES `suppliergoods` (`id`) 
) 
COLLATE='utf8_general_ci' 
ENGINE=InnoDB; 

지수는

INDEX `FK_SupplierOrderGoods_SupplierGoods` (`supplierGood_id`) 

자동으로 생성되었다.

괜찮습니까, 그 색인은 다른 게시물에서 발견 된대로 만들어졌습니다. 인덱스를 사용하고 테이블에서 검색을 최적화하는 데 사용되는 인덱스를 찾고있었습니다. 이제 인덱스를 사용하여 데이터베이스 작업을 최적화해야한다는 것을 알고 있습니다.

또한 인덱스가 복잡 할 수 있음을 발견했습니다 (한 필드가 아닌 일부 필드에서).

INDEX `FK_ShopOrders_SupplierGoods` (`shopOrder_id`, `supplierGood_id`), 

또는 두 개의 간단한 인덱스?

INDEX `FK_SupplierOrderGoods_SupplierGoods` (`supplierGood_id`), 
INDEX `FK_SupplierOrderGoods_ShopOrders` (`shopOrder_id`), 

답변

3

난 여전히 인덱스에 대해 자신을 수입하고있어하지만 난 그게 의존하는 것 생각 :이 경우에 나는 복잡한 인덱스를 사용해야 물어보고 싶은 어떤 종류의 데이터를 DB에 쿼리 할 것입니다.

예를 들어, 특정 레코드에 대한 보고서가 많이 실행되면 인덱스를 원할 것입니다. 보고서에서 단 하나의 열을 가져온 다음 하나의 열 인덱스를 만들면 이름과 성 레코드와 같이 두 개로 구성된 경우 둘 모두에 대해 하나의 열 인덱스를 만들 수 있습니다.

레코드와 인덱스를 모두 업데이트해야하므로 성능 문제가 발생할 수 있으므로 모든 것에 인덱스를 넣고 싶지는 않습니다. 따라서 많은 양의 삽입 또는 업데이트가 이루어진 테이블은 색인이 손상되는지 또는 도움이되는지 생각하고 싶어합니다.

색인으로 덮을 정보가 많습니다.

+0

음 ... 내 테이블의 경우 ...이 테이블에 대한 쿼리는 주로 다음과 같습니다. 'select * from SupplierOrderGoods where shopOrder_id = X'. 그래서이 경우 나는'shopOrder_id' 필드에서만 인덱스를 사용해야 만합니까? 'select * from SupplierOrderGoods where shopOrder_id = X and supplierGood_id = Y'와 같은 쿼리가 없으므로'shopOrder_id'와'supplierGood_id' 두 필드 모두에 복잡한 인덱스가 필요하지 않습니다. –

+0

글쎄,'supplierGood_id = Y'에서'select * from SupplierOrderGoods '라는 쿼리가 없으므로'supplierGood_id' 필드에 대한 인덱스조차 필요하지 않습니다. 내가 맞습니까? 그러나 shopOrder_id가 기본 키의 일부라면 어쨌든 이익이됩니까? –

관련 문제