gpt4 book ai didi

mysql - 索引大型 MySQL 表

转载 作者:行者123 更新时间:2023-11-30 00:21:18 26 4
gpt4 key购买 nike

我对索引一个大表有点迷失。问题是我需要使用很多不同的过滤器来查询它。例如在表格中:

id | key_1 | key_2 | ... | key_n

可能有一个针对一个或多个键的过滤器,每个键都添加(我正在使用 Zend 框架使用准备好的语句构建查询):

$select->where($this->_db->quoteInto('key_n = ?', $filter->key_n));

如果我理解正确的话,为了加快查询速度,我应该对某些列建立索引。所以它提出了几个问题:

  • 向所有用于过滤数据的列添加索引是否有意义?
  • 如果我要对很多列建立索引,这将如何影响数据写入表的速度?
  • 通过组合列添加索引是否有意义?

最佳答案

@bodi0 发布的链接有一些答案。但我会添加以下内容:

Does it make sense to add indexes to all the columns that will be used to filter the data?

也许吧。通常,索引确实可以加快数据检索速度。但在某些情况下却不然:如果 cardinality索引列的值较低,索引可能不会提供任何好处或提供的好处很少,以至于优化器可能会决定忽略它。例如,假设“性别”列只有两个值“M”或“F”。如果每个索引适用于大约 50% 的行,那么索引可能不会带来什么改进。或者,如果 75% 的记录是“M”并且您正在查询“M”,则索引很可能根本不会被使用。

Does it make sense to add indexes with combination of the columns?

也许吧。如果您知道特定的列组合通常会用于在单个 SELECT 中进行过滤,那么这样的索引可能会很有用。但请注意,要使索引可用,其第一列必须位于过滤条件中。例如:只有当将gender(以及可选的state)用作条件时,才能使用列(gender, state)上的索引询问。如果仅通过索引过滤state,则不会使用。

然后,鉴于 MySQL 对表的每个查询仅使用单个索引,复合索引可能确实有意义,因为如果没有它,数据库引擎只能使用一个索引列。

关于mysql - 索引大型 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23213423/

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