0

我目前正在开始创建一个应用程序,其中最重要的部分是一个包含 20 列的表格。该表将来将包含 3-5-7k 条记录。我必须将此特定表中的一个 WHERE 子句中的多个列组合起来以进行过滤(小于、等于等)。这些列是 varchars、ints、decimal 和 date。所以我的问题是,如果我假设有 3k 行,如果在 WHERE 子句中使用全部或超过 10 个条件,我的查询可能会慢一点,我如何决定要索引哪些列。如何优化这样的查询。我知道 3-5-7k 行对 MySQL 来说不算什么。问题是我在表中有 20 列。另外,如果这很重要,我将在服务器上使用 PHP。

提前致谢。

4

2 回答 2

0

每个表都有特定的行为。我们必须分析每个案例。

一般来说,为了使搜索快速,您应该在 where 中包含的 20 列中的每一列中创建一个索引。另一方面,这会减慢“插入”并占用大量空间索引。因此,我们应该分析是否在每一列中添加索引。

决定哪一列不应该是这个索引的一些提示:

  • 避免重复列有值,执行计划不使用你的索引。
  • 避免使用索引类型:varbinary。
  • 具有高度更新的列。
于 2012-07-14T05:08:08.983 回答
0

在确定主键后,这应该是一个比性能优化更好的逻辑猜测,您可能会向表中添加额外的索引。

您必须记住,在给定的表引用中,mysql 一次只能有效地使用一个索引。引擎现在确实有可能在内部合并各种索引,然后同时使用它们,但性能不是很好。(见:http ://www.mysqlperformanceblog.com/2009/09/19/multi-column-indexes-vs-index-merge )

我建议您确定一组要处理的查询(最终也与其他表连接),然后,如果过滤字段太多,请确定过滤出/入记录的最有效字段。如何知道什么是最有效的?例如,一个非空唯一字段非常适合:mysql 会像 ligtning 一样快地过滤掉这个字段。

一般来说,经验法则是选择一个高度区分的列/列集:这些值不应该重复太多次,否则索引会效率低下。

这是一个开始。

问候

于 2012-07-12T12:21:32.673 回答