Php 可恶的?SELECT*与显式列出表中的每个字段有何不同。但是,如果不看表,就很难知道这些字段是什么。这是糟糕的文件。这可能会导致发送更多数据,影响速度等。您可以在tbl_新闻和tbl_标记关系表上发布索引吗?解释说将使用哪些索引,但没有说明它们的组件是什么

Php 可恶的?SELECT*与显式列出表中的每个字段有何不同。但是,如果不看表,就很难知道这些字段是什么。这是糟糕的文件。这可能会导致发送更多数据,影响速度等。您可以在tbl_新闻和tbl_标记关系表上发布索引吗?解释说将使用哪些索引,但没有说明它们的组件是什么,php,optimization,mysql,Php,Optimization,Mysql,可恶的?SELECT*与显式列出表中的每个字段有何不同。但是,如果不看表,就很难知道这些字段是什么。这是糟糕的文件。这可能会导致发送更多数据,影响速度等。您可以在tbl_新闻和tbl_标记关系表上发布索引吗?解释说将使用哪些索引,但没有说明它们的组件是什么。我猜这是一个“缺少索引”的问题(尽管运行25个单独的查询也不好),乔纳森,你是对的。这是一个缺少索引的问题。Cletus指出哪一个和他的建议导致了10倍的速度。它将给出tbl_tag_关系中的所有字段,这些字段在技术上不会有相同的结果,但无论


可恶的?SELECT*与显式列出表中的每个字段有何不同。但是,如果不看表,就很难知道这些字段是什么。这是糟糕的文件。这可能会导致发送更多数据,影响速度等。您可以在tbl_新闻和tbl_标记关系表上发布索引吗?解释说将使用哪些索引,但没有说明它们的组件是什么。我猜这是一个“缺少索引”的问题(尽管运行25个单独的查询也不好),乔纳森,你是对的。这是一个缺少索引的问题。Cletus指出哪一个和他的建议导致了10倍的速度。它将给出tbl_tag_关系中的所有字段,这些字段在技术上不会有相同的结果,但无论如何可能只有两个字段,限制结果将提供较少的结果。哦,等等,我忘了,可能一开始没有20个结果,这当然是可能的,所以可能是一样的这确实会产生相同的结果,而且启动速度更快!这不是问题所在。您的查询将得到优化,执行方式与原始查询相同。您刚刚将其重写为联接,这可能是错误的,因为第二个表根本没有被选中。Cletus建议的索引确实做到了这一点。您对SELECT*的看法是对的,我正试图找到一种简单的方法来解决这个问题,但是代码非常疯狂,所以更改它可能会影响我还没有想到的查询。。。我必须小心。+1你的观点被很好地理解了,但我认为克莱特斯从来没有使用过disabuse这样的词:)我想说,上面的语法更明确,不一定更清楚。这是个好词。:)唉,自从我去检查之后,我不得不删除它。令人惊讶的是,MySQL对连接的处理方式与Join不同(我不相信Oracle会这样)。有意思。除了tbl_标记_关系上的news_id之外,已经为所有这些设置了键(tbl_行,我想您指的是tbl_新闻)。只添加索引将页面加载时间缩短了一半。。。现在是16秒。我很惊讶如此微小的变化对性能有如此巨大的影响。非常感谢你。。。我要去读一读索引了。呃,是的,把我的线和别的东西交叉了。固定的。我很惊讶您的查询仍然需要在秒范围内的时间。tbl_新闻和tbl_标签关系中有多少行?我尝试了相当于100k和600k的记录,并在0.7秒内获得它。当然,连接是即时的。我使用过PostgreSQL,它功能强大,但改变数据库根本不是一种选择。 SELECT * FROM tbl_news WHERE news_id IN (select news_id from tbl_tag_relations WHERE tag_id = 20) 1 PRIMARY tbl_news ALL NULL NULL NULL NULL 1318 Using where 2 DEPENDENT SUBQUERY tbl_tag_relations ref FK_tbl_tag_tags_1 FK_tbl_tag_tags_1 4 const 179 Using where
select * 
 from tbl_news, tbl_tag_relations 
 where 
      tbl_tag_relations.tag_id = 20 and 
      tbl_news.news_id = tbl_tag_relations.news_id 
 limit 20
SELECT * 
FROM tbl_news, tbl_tag_relations 
WHERE tbl_tag_relations.tag_id = 20 AND
tbl_news.news_id = tbl_tag_relations.news_id 
SELECT news_title, news_body 
... 
LIMIT 5;
SELECT news_id, name, blah
FROM tbl_news n
JOIN tbl_tag_relations r ON r.news_id = n.news_id
WHERE r.tag_id IN (20,21,22)
SELECT * FROM tbl_news WHERE news_id
 IN (select news_id from
 tbl_tag_relations WHERE tag_id = 20)
SELECT tn.*
FROM tbl_news tn
JOIN tbl_tag_relations ttr ON ttr.news_id = tn.news_id
WHERE ttr.tag_id = 20