如何在我的表中正确使用索引?

时间:2014-06-16 01:16:28

标签: mysql sql indexing

我意识到,当我在表中创建外键时,索引会自动添加。

在我的表格中:

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`),

1 个答案:

答案 0 :(得分:3)

我自己仍在赚取索引,但我相信它将依赖于您将查询数据库的数据类型。

例如,如果您有一个特定记录的报告将会运行很多,那么您将需要一个索引。如果报告只提取一列,则创建一个列索引,如果它由两个组成,如名字和姓氏记录,那么您可能需要两个索引。

您不希望在所有内容上放置索引,因为这可能会导致性能问题,因为记录和索引都需要更新。因此,对其进行了大量插入或更新的表格,您将想要考虑索引是否会受到伤害或帮助。

索引的大量信息。