mysql 表有 2 个全文索引和 1 个普通索引是不好的设计吗? [关闭]

Posted

技术标签:

【中文标题】mysql 表有 2 个全文索引和 1 个普通索引是不好的设计吗? [关闭]【英文标题】:Is it bad design to have 2 full text indexes and one normal index for mysql table? [closed] 【发布时间】:2021-12-02 03:23:49 【问题描述】:

我有一个产品表,我在其中创建了以下索引:

product_category 列全文索引:我希望能够更快地按类别检索产品。 字段值示例:[“服装 >> 女装 >> Women_Tops >> Women_TShirtsTops >> Candies by Pantaloons 衬衫”]

标题全文索引:允许用户按标题搜索产品

价格指数正常:允许更快地按价格排序

在product_id上自动生成主索引

一切正常,但我只是想得到建议,在一个表中有这么多索引是一个糟糕的设计选择吗?随着表的大小增长到 500 万,是否会因为有多个索引而导致任何性能问题?

【问题讨论】:

没有足够的信息来做出决定。 索引加快了 SELECT 和相关查询的速度。如果您要进行大量更新,那么大量索引可能会对性能产生不利影响。如果您的表大部分是静态的,那么您将不会看到该问题。您必须分析您的应用程序以查看效果。 重要的是让应用程序系统可观察,这样当出现问题时,火箭科学家就不需要找出问题所在。 如果您需要所有索引来进行快速查询,那么您需要它们。索引的缺点(除了磁盘空间和内存使用)是任何数据更改都会变慢一个档次。起初这可能难以察觉,但您在表上创建的索引越多,性能下降就越明显。现在,要回答这个问题,您需要对其进行基准测试。尝试低负载(更新 + 插入 + 删除 + 选择),然后将其加载,直到你发现它可以支持多少负载 @TheImpaler 感谢您的回复。关于如何监控表的性能,即它占用的 ram 或磁盘空间,或者性能是否受到负面影响,有关 mysql 的任何建议或资源? 【参考方案1】:

当然,有多个索引是可以的。但是,除了极少数情况,一个SELECT 只会使用一个索引。

如果合适,将首先使用 FT 索引。如果您有任何其他索引,大多数情况下都没有关系。

如果查询使用的是 FT 索引,则将不使用下订单价格索引。

如果有额外的索引,INSERT 会有一些额外的开销。但通常这些索引是值得拥有的。也就是说,不要仅仅因为插入活动的表大小而避免添加索引。请避免添加不会使用的索引。

如果我们可以看到您的查询样本,我们或许可以提供更多详细信息。

我使用 MySQL 的慢日志来识别对系统影响最大的查询。但是没有工具会告诉你如何加快慢查询。

【讨论】:

以上是关于mysql 表有 2 个全文索引和 1 个普通索引是不好的设计吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

mysql主键普通索引唯一索引和全文索引的比较

MYSQL中的普通索引,主健,唯一,全文索引区别

普通列和全文列的 MySQL 索引

MySQL前缀索引

mysql 普通索引和全文索引的区别

mysql中,主键与普通索引