gpt4 book ai didi

MySQL索引顺序

转载 作者:行者123 更新时间:2023-11-29 06:12:08 25 4
gpt4 key购买 nike

我刚开始使用 InnoDB 在 MySQL 上建立索引。

首先,希望我是对的,因为我正在使用 InnoDB 并创建外键,它们会在查询表时自动用作索引吗?对吗?

另外,我读到索引的顺序会影响查询的速度,即使使用它也是如此。

那么...如果确实会影响查询,我该如何指定索引的顺序。

如果以我的下表为例。对该表的查询首先使用 org_id 上的索引 FK 将非常有益,因为这将大大减少读取的行数,并且应用程序中大多数数据将被 org_id 分隔。

    CREATE TABLE IF NOT EXISTS `completed_checks` (
`complete_check_id` int(15) NOT NULL AUTO_INCREMENT,
`check_type` varchar(40) NOT NULL,
`check_desc` varchar(200) DEFAULT NULL,
`assigned_user` int(12) DEFAULT NULL,
`assigned_area` int(12) DEFAULT NULL,
`org_id` varchar(8) NOT NULL,
`check_notes` varchar(300) DEFAULT NULL,
`due` date NOT NULL,
`completed_by` int(12) DEFAULT NULL,
`completed_on` datetime DEFAULT NULL,
`status` int(1) DEFAULT NULL,
`passed` int(1) DEFAULT '0',
PRIMARY KEY (`complete_check_id`),
KEY `fk_org_id_CCheck` (`org_id`),
KEY `fk_user_id_CCheck` (`assigned_user`),
KEY `fk_AreaID_CCheck` (`assigned_area`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

那么在where子句中用org_id查询这张表时,MySQL会先使用org_id上的FK索引吗?

另外,我将如何指定索引在 MySQL 中的使用顺序?如果这是我需要关心的事情?

谢谢

最佳答案

  1. 是的,这是正确的,请参阅 creating foreign keys 上的 MySQL 文档:

index_name represents a foreign key ID. The index_name value is ignored if there is already an explicitly defined index on the child table that can support the foreign key. Otherwise, MySQL implicitly creates a foreign key index

  1. 表中索引的顺序不会影响查询将使用的索引。你甚至不能说一般来说所有的查询都应该首先使用这样的索引,因为不同的查询可能需要不同的索引。此外,MySQL 不能在查询中为每个表使用超过 1 个索引。

  2. 一般来说,MySQL 会决定使用哪个索引(如果有的话)。如果您认为 MySQL 的决定有误,那么您可以使用 index hint影响 MySQL 的决定:

Index hints give the optimizer information about how to choose indexes during query processing.

在较新版本的 MySQL 中,您还可以使用 optimizer hints影响查询计划。

影响索引使用的最后一种方法是使用 analyse table command 强制更新在表上收集的索引统计信息。 :

ANALYZE TABLE analyzes and stores the key distribution for a table.

关于MySQL索引顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37728623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com