• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 与优化器有关的问题

    MySQL使用基于成本的优化器来确定解决查询的最佳方法。在许多情况下,MySQL可以计算出最佳的查询计划,但有时MySQL手中没有足够的有关数据的信息,因此必须对数据进行“有根据的”猜测。

    对于MySQL没有做“正确”事情的情况,可以用来帮助MySQL的工具是:

    • 使用该EXPLAIN语句获取有关MySQL如何处理查询的信息。要使用它,只需将关键字添加EXPLAINSELECT语句的前面:

      mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;
      

      EXPLAIN“ EXPLAIN语句”中将详细讨论。

    • 使用更新的扫描表的键分布。请参见“ ANALYZE TABLE语句”。ANALYZE TABLE tbl_name
    • 使用FORCE INDEX的扫描表告诉MySQL该表扫描是非常昂贵相比,使用给定的指标:

      SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
      WHERE t1.col_name=t2.col_name;
      

      USE INDEX并且IGNORE INDEX可能也很有用。请参见“索引提示”。

    • 全局和表级STRAIGHT_JOIN。请参见“ SELECT语句”。
    • 您可以调整全局或特定于线程的系统变量。例如,使用该选项启动mysqld--max-seeks-for-key=1000或使用SET max_seeks_for_key=1000告诉优化器假定没有键扫描导致超过1000个键查找。请参见“服务器系统变量”。