MySQL通过Id和超级字符串的组合进行选择

时间:2014-08-04 08:58:08

标签: mysql sql optimization indexing substring

这与here中的旧问题有关,但这个问题不同。

我有一个来自许多“客户”的网络“文章”的MySQL表。该表名为 ArticleTable ,它有几个字段,其中两个是:

CustomerId =拥有该文章的客户的ID    文章网址的 ArticleId = substring ,唯一标识文章的网址。

现在,在运行时给定客户ID +网页的完整网址,我需要找到表格中是否有客户的文章,与此完整网址相匹配。我能想到的显而易见的问题是:

SELECT * FROM ArticleTable
WHERE CustomerId = givenCustomerId
AND 'givenCompleteUrl' LIKE CONCAT('%', ArticleId, '%')

现实情况是我可能有很多客户,但每个客户只有几篇文章。但是,在上面的查询中,我没有完全控制MySQL的选择机制。所以问题是:

  1. 使用上面的查询语法,如果我正确定义索引,MySQL是否足够聪明,只能查看givenCustomerId的几行? (即,不决定先按ArticleId过滤,然后再按CustomerId过滤)

  2. 或者,将所有givenCustomerId行简单地选入PHP并自行匹配字符串会更快吗?

  3. 如果我仍然依赖MySQL来执行完整查询,我应该定义哪些索引来优化上述查询?

1 个答案:

答案 0 :(得分:0)

我讨厌你的第二个where子句。它可能很慢,在某些情况下实际上是不正确的。用PHP提取ArticleId然后只需执行以下操作会好得多:

SELECT * FROM ArticleTable
WHERE CustomerId = ?
AND ArticleId = ?

要回答您的问题,我认为如果您使用此查询,只需索引(ArticleID, CustomerId)即可。