mysql - 索引一个不断变化的字段是否合理,或者不断写入会降低性能吗?

标签 mysql sql indexing filesort

我目前正在为我的一个 MySQL 表编制索引,并且已经到了需要专家建议如何进行的地步。

该表的结构类似于以下内容:

ProductID - INT - UNSIGNED - NOT NULL - AUTO INCREMENT - PRIMARY KEY
ProductName - VARCHAR(64) - NOT NULL
ProductViews - INT - UNSIGNED - NOT NULL

在 WHERE 子句中使用的唯一字段是 ProductID。 ORDER BY 中使用的唯一字段是 ProductViews。

该表相当大,因此典型的查询(当连接到另一个表时)可能需要一些时间。 在典型查询上运行 EXPLAIN 显示由于 ProductViews 字段,MySQL 显示“额外:使用位置;使用文件排序”

我想为 ProductViews 编制索引以摆脱文件排序,但是每次访问该页面时该字段中的值都会递增 1。

索引一个不断变化的字段是否合理,或者不断写入会降低性能吗?在这种情况下,我真的不能做很多事情,不得不忍受文件排序问题吗?

最佳答案

您问的是索引的 yield 是否超过成本。我会说文件排序非常昂贵,值得在这里使用索引。

但唯一真正的答案只能通过测量找到。设置标准(如网页加载速度)并使用和不使用索引进行测量。

关于mysql - 索引一个不断变化的字段是否合理,或者不断写入会降低性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5165507/

相关文章:

mysql - Django 查询values_list获取最后一个值

mysql - 计算SQL中两行之间的差异

database - SMART 逻辑以避免动态 SQL 和索引的使用

c# - foreach 循环的当前索引

MySQL:在一个查询中合并不同的实体

mysql - ruby on rails file 从数据库下载二进制文件并提供链接

mysql - 如何在 MySQL 中选择带有附加 where 子句的 count(distinct)?

php - 创建一个高效的分页系统

sql - 使用dplyr窗口函数滞后(SQL数据库)

c - 如何在C中打印数组中的数据?