Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql查询中使用force index子句可能有哪些缺点?_Mysql_Sql_Indexing_Query Optimization - Fatal编程技术网

在mysql查询中使用force index子句可能有哪些缺点?

在mysql查询中使用force index子句可能有哪些缺点?,mysql,sql,indexing,query-optimization,Mysql,Sql,Indexing,Query Optimization,示例-从表中选择*强制索引(索引列表),其中包含条件 在不使用强制索引的情况下,mysql的查询优化程序会决定可以在给定查询中使用的索引的最佳候选者。但是,如果它发现它仍然必须扫描主要%的行,那么它将跳过索引并继续进行完全扫描。因此,它可能使用也可能不使用任何索引 因此,假设查询优化程序有一个更好的索引候选者,它可以使用(甚至不使用任何索引)更快地计算查询。但通过强制索引,它可能会减慢查询速度 为了确保我不会犯这个错误[…]我应该注意什么 为什么不让查询计划者来做这些艰苦的工作呢 数据库供应商投

示例-
从表中选择*强制索引(索引列表),其中包含条件

在不使用强制索引的情况下,mysql的查询优化程序会决定可以在给定查询中使用的索引的最佳候选者。但是,如果它发现它仍然必须扫描主要%的行,那么它将跳过索引并继续进行完全扫描。因此,它可能使用也可能不使用任何索引

因此,假设查询优化程序有一个更好的索引候选者,它可以使用(甚至不使用任何索引)更快地计算查询。但通过强制索引,它可能会减慢查询速度

为了确保我不会犯这个错误[…]我应该注意什么

为什么不让查询计划者来做这些艰苦的工作呢

数据库供应商投入大量精力开发高效、微调的软件。在绝大多数情况下,查询规划器在为查询构建理想的执行计划方面做出了正确的决策。执行完整扫描而不是昂贵的索引查找通常是其中之一

根据我的经验,确实需要索引提示的情况非常罕见。此外,索引提示在某种程度上会产生技术债务,因为当数据或结构将来发生变化时,它们可能会对查询的性能产生负面影响。那应该是你最后的选择,而不是第一件事


注意:不可忽视的一点是,优化器需要做出正确的决策。确保定期在表上运行。

有索引提示和没有索引提示的查询在性能方面如何比较?
强制索引
今天可能会有所帮助,但明天数据分布发生变化时会受到影响。