这与here中的旧问题有关,但这个问题不同。
我有一个来自许多“客户”的网络“文章”的MySQL表。该表名为 ArticleTable ,它有几个字段,其中两个是:
CustomerId =拥有该文章的客户的ID 文章网址的 ArticleId = substring ,唯一标识文章的网址。
现在,在运行时给定客户ID +网页的完整网址,我需要找到表格中是否有客户的文章,与此完整网址相匹配。我能想到的显而易见的问题是:
SELECT * FROM ArticleTable
WHERE CustomerId = givenCustomerId
AND 'givenCompleteUrl' LIKE CONCAT('%', ArticleId, '%')
现实情况是我可能有很多客户,但每个客户只有几篇文章。但是,在上面的查询中,我没有完全控制MySQL的选择机制。所以问题是:
使用上面的查询语法,如果我正确定义索引,MySQL是否足够聪明,只能查看givenCustomerId的几行? (即,不决定先按ArticleId过滤,然后再按CustomerId过滤)
或者,将所有givenCustomerId行简单地选入PHP并自行匹配字符串会更快吗?
如果我仍然依赖MySQL来执行完整查询,我应该定义哪些索引来优化上述查询?
答案 0 :(得分:0)
我讨厌你的第二个where子句。它可能很慢,在某些情况下实际上是不正确的。用PHP提取ArticleId然后只需执行以下操作会好得多:
SELECT * FROM ArticleTable
WHERE CustomerId = ?
AND ArticleId = ?
要回答您的问题,我认为如果您使用此查询,只需索引(ArticleID, CustomerId)
即可。