在High Performance MySQL 159页上他们谈分手复杂的查询到简单的:MyISAM表现:加入分解?
转换
SELECT * FROM tag
JOIN tag_post ON tag_post.tag_id=tag.id
JOIN post ON tag_post.post_id=post.id
WHERE tag.tag='mysql';
要
SELECT * FROM tag WHERE tag='mysql';
SELECT * FROM tag_post WHERE tag_id=1234;
SELECT * FROM post WHERE post.id in (123,456,567,9098,8904);
和排序的执行实际参加自己在你的应用程序。
我的问题是阉这是史迪威当最终的查询与需要相匹配(实际表本身具有500K左右的条目)几千个ID的WHERE子句这样一个好主意。
我的意思是,会不会有很大的惩罚具有类似于
SELECT * FROM post WHERE post.id in (123,456,567, ... <a few thousand IDs here> ... ,9098,8904);
,取代上述连接语句查询?将这个逻辑转移到数据库中的存储过程会有帮助吗(同时考虑在MySQL中实现的存储过程有多糟糕)?
请参见以下链接大IN子句和临时连接表之间的性能对比。 http://explainextended.com/2009/08/18/passing-parameters-in-mysql-in-list-vs-temporary-table/ – 2011-03-22 00:37:35
感谢,该页面是有用 – Dexter 2011-03-22 00:48:45