科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Schema的优化和索引 - 高性能的索引策略 - 隔离列

Schema的优化和索引 - 高性能的索引策略 - 隔离列

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Schema的优化和索引 - 高性能的索引策略 - 隔离列

作者:ddvip 来源:ddvip 2009年12月23日

关键字: Schema PHP MySQL

  • 评论
  • 分享微博
  • 分享邮件

Schema的优化和索引 - 高性能的索引策略 - 隔离列

 

 如果你在一个查询中不隔离已经索引的列,一般来说MySQL就不会使用这个列上的索引,除非在查询中隔离这个列。“隔离”列的意思就是,这个列不能使一个表达式的一部分或者被放在一个函数的内部。

  举个例子,在这个查询中,你不能使用在actor_id上的索引。

  mysql> SELECT actor_id FROM sakila.actor WHERE actor_id + 1 = 5;

  我们很简单的就能知道上面的actor_id+1=5和actor_id=4是相同的,但是MySQL却不能处理这个actor_id+1=5这个方程式。这取决于你所做的。你应该简化你的WHERE条件。因此应该把索引列独立在比较符号的一端。

  下面的例子是我们另一个常犯的错误。

  mysql> SELECT ... WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(date_col) <= 10;

  这个查询将会查找最近10天的所有的行,但是这个语句不会使用索引,因为使用了TO_DAYS函数。下面是比较好的方式

  mysql> SELECT ... WHERE date_col >= DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY);

  这个查询使用索引不会有什么问题,但是你可以用另一种方法提升性能。CURRENT_DATE的引用会导致缓存失效。你可以用具体的日期来替换它来解决这个问题。

  mysql> SELECT ... WHERE date_col >= DATE_SUB('2008-01-17', INTERVAL 10 DAY);

  在以后会详细说到查询的缓存。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章