【问题标题】:How to use index in my table correctly?如何正确使用表中的索引?
【发布时间】:2014-06-16 01:16:27
【问题描述】:

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

在我的桌子上:

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

【问题讨论】:

    标签: mysql sql indexing


    【解决方案1】:

    我自己仍在为索引赚取收益,但我相信这将取决于您将查询数据库的数据类型。

    例如,如果您有针对某条记录的报告,该报告将被大量运行,您将需要对其建立索引。如果报表只提取一列,则创建一列索引,如果它由两个组成,例如名字和姓氏记录,您可能需要一个用于两者。

    您不希望对所有内容都设置索引,因为这可能会导致性能问题,因为记录和索引都需要更新。因此,对于在其上完成大量插入或更新的表,您需要考虑索引是否有害或有帮助。

    索引涵盖的信息很多。

    【讨论】:

    • 嗯...如果是我的表...最常见的查询此表将是这个:select * from SupplierOrderGoods where shopOrder_id = X。所以在这种情况下,我应该只在shopOrder_id 字段上使用索引,对吗?不会有任何像select * from SupplierOrderGoods where shopOrder_id = X and supplierGood_id = Y 这样的查询,所以我不需要在shopOrder_idsupplierGood_id 这两个字段上都有复杂的索引,对吧?
    • 好吧,我什至不需要字段supplierGood_id 的索引,因为不会有查询select * from SupplierOrderGoods where supplierGood_id = Y。我对吗?但是如果 shopOrder_id 仍然是主键的一部分,它会给我一些利润吗?
    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2016-11-23
    相关资源
    最近更新 更多