Mysql 索引:查询生成器的最佳实践

Posted

技术标签:

【中文标题】Mysql 索引:查询生成器的最佳实践【英文标题】:Mysql indexing : best practices whith query builder 【发布时间】:2021-08-30 09:19:13 【问题描述】:

我们有包含数百万数据的表格。我们打算在此表上创建索引以优化搜索。

这里的问题是这个表上的 11 个过滤器是可变的,这意味着用户可以选择一个或多个过滤器。最后,where子句上的列可以在查询中按编号和顺序改变

创建索引的最佳做法是什么??

提前谢谢你

【问题讨论】:

这似乎是一个 BI 应用程序,它倾向于在内存中缓存大量数据并在缓存的数据上执行搜索,而不是每次都从数据库中即时检索所有内容。如果您想使用索引来加速每次搜索,那么您必须为每个可能的字段组合创建一个索引,考虑到字段的数量,这是不可行的。 选择最常用的3-5列或列组合,并按其索引。为每个可能的过滤器组合创建索引是不真实的...... 【参考方案1】:

对于长文本,请使用 FULLTEXT。

对于数字和短字符串,使用 INDEX。

研究用户可能搜索的内容,然后构建几个 2 列索引。返回这些列的名称;我会帮你进一步的。

【讨论】:

我的表包含 36 个字符和 10 个字符和布尔值的 varchars。您能解释一下 2 列索引吗? @blue - 复合索引:dev.mysql.com/doc/refman/8.0/en/multiple-column-indexes.html 谢谢,是的,我对复合索引很了解,我询问了数字2的选择,正如我发布的那样,查询可能包含超过2列 @blue - “每一种可能的组合” [我假设] 会导致大量索引——可能超过 MySQL 可以处理的数量。一个“合理”的数字是 5-10 个索引。但这并没有为大量组合留下太多空间。 “2”并不神奇;这是另一个经验法则,可帮助您专注于寻找有限数量的半最优索引。 @blue - 另外,...超越“2”正在进入“收益递减”。

以上是关于Mysql 索引:查询生成器的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

夯实Mysql基础MySQL性能优化的21个最佳实践 和 mysql使用索引

索引最佳实践

MySQL 索引 - 最佳实践是啥?

技术分享MySQL数据库优化的最佳实践

MySQL 索引最佳实践

慢SQL治理最佳实践