테이블에 외래 키를 만들 때 색인이 자동으로 추가된다는 것을 알았습니다. 내 테이블에서테이블에서 인덱스를 올바르게 사용하는 방법은 무엇입니까?
:
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`),
음 ... 내 테이블의 경우 ...이 테이블에 대한 쿼리는 주로 다음과 같습니다. 'select * from SupplierOrderGoods where shopOrder_id = X'. 그래서이 경우 나는'shopOrder_id' 필드에서만 인덱스를 사용해야 만합니까? 'select * from SupplierOrderGoods where shopOrder_id = X and supplierGood_id = Y'와 같은 쿼리가 없으므로'shopOrder_id'와'supplierGood_id' 두 필드 모두에 복잡한 인덱스가 필요하지 않습니다. –
글쎄,'supplierGood_id = Y'에서'select * from SupplierOrderGoods '라는 쿼리가 없으므로'supplierGood_id' 필드에 대한 인덱스조차 필요하지 않습니다. 내가 맞습니까? 그러나 shopOrder_id가 기본 키의 일부라면 어쨌든 이익이됩니까? –