在mysql查询中使用force index子句可能有哪些缺点?
示例-在mysql查询中使用force index子句可能有哪些缺点?,mysql,sql,indexing,query-optimization,Mysql,Sql,Indexing,Query Optimization,示例-从表中选择*强制索引(索引列表),其中包含条件 在不使用强制索引的情况下,mysql的查询优化程序会决定可以在给定查询中使用的索引的最佳候选者。但是,如果它发现它仍然必须扫描主要%的行,那么它将跳过索引并继续进行完全扫描。因此,它可能使用也可能不使用任何索引 因此,假设查询优化程序有一个更好的索引候选者,它可以使用(甚至不使用任何索引)更快地计算查询。但通过强制索引,它可能会减慢查询速度 为了确保我不会犯这个错误[…]我应该注意什么 为什么不让查询计划者来做这些艰苦的工作呢 数据库供应商投
从表中选择*强制索引(索引列表),其中包含条件代码>
在不使用强制索引的情况下,mysql的查询优化程序会决定可以在给定查询中使用的索引的最佳候选者。但是,如果它发现它仍然必须扫描主要%的行,那么它将跳过索引并继续进行完全扫描。因此,它可能使用也可能不使用任何索引
因此,假设查询优化程序有一个更好的索引候选者,它可以使用(甚至不使用任何索引)更快地计算查询。但通过强制索引,它可能会减慢查询速度
为了确保我不会犯这个错误[…]我应该注意什么
为什么不让查询计划者来做这些艰苦的工作呢
数据库供应商投入大量精力开发高效、微调的软件。在绝大多数情况下,查询规划器在为查询构建理想的执行计划方面做出了正确的决策。执行完整扫描而不是昂贵的索引查找通常是其中之一
根据我的经验,确实需要索引提示的情况非常罕见。此外,索引提示在某种程度上会产生技术债务,因为当数据或结构将来发生变化时,它们可能会对查询的性能产生负面影响。那应该是你最后的选择,而不是第一件事
注意:不可忽视的一点是,优化器需要做出正确的决策。确保定期在表上运行。有索引提示和没有索引提示的查询在性能方面如何比较?强制索引
今天可能会有所帮助,但明天数据分布发生变化时会受到影响。