gpt4 book ai didi

mysql - 为mysql表创建索引

转载 作者:可可西里 更新时间:2023-11-01 08:06:17 25 4
gpt4 key购买 nike

我在 mysql 数据库中有一个名为 data 的表。该表非常大,大约有 50 万条记录,这个数字将增长到 100 万条。每条记录由大约 50 列组成,其中大部分包含 varchars。

data 表的使用非常频繁。实际上,大多数查询都访问该表。大约 50 个用户同时读取和写入数据。由于用户上传和检查他们的数据,系统负载很高,因此最多可以停止一两个小时。

经过一番研究。我发现几乎所有具有“where”子句的选择查询都使用表中的四个字段之一。这些字段是:isActive、country、state、city——都是 int 格式。哪里可以是

    where isActive = {0|1}

    where isActive = {0|1} and {country|state|city} = {someIntValue}

    where {country|state|city} = {someIntValue}

最后一件事是该表除了主 id 之外没有任何索引。

在表格增长到当前大小后,我遇到了一些性能问题。

所以,我的问题是,如果我在 isActive、country、state 和 city 列上创建索引,性能会提高吗?

UPD:我刚刚在其中一个字段上创建了一个索引,哇!查询正在立即执行。谢谢你们。

最佳答案

我认为索引 isActive 字段不是一个好主意,因为它会在添加/更新/删除时导致索引开销,但它只会在读取时将数据分成两个 block (1 和 0)它不会真正帮助。

编辑:找到这个来解释上面的观点: Is there any performance gain in indexing a boolean field?

对于其他树列,我建议您在大多数用户离线时(在晚上或午餐时间)进行基准测试,看看它对性能有何影响,但我认为它确实有帮助而且没​​有很多缺点。

编辑:ypercube已经指出了一些有趣的用例,其中我关于索引 bool 字段的回答不相关,请查看评论。

关于mysql - 为mysql表创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16970148/

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