Mysql 下 SQL 优化NOT IN (除了把NOT IN转化为LEFT JOIN外,可优化影响的数据行数)
Mysql 下 SQL 优化NOT IN (除了把NOT IN转化为LEFT JOIN外,可优化影响的数据行数)
2010-05-31 17:38:30|??分类:?默认分类|字号?订阅
Mysql?下?SQL?优化 NOT IN:
?
?
除了把NOT IN转化为LEFT JOIN外,可通过优化业务逻辑,减少了查询涉及到的返回的数据,从而达到优化查询的目的。
?
?
====================================================================
查询目的:? 最新更新的10条博文信息 :从博文表中取出200条,然后排除重复,按照发表时间顺序显示。
?
SELECT?*?FROM?(?
?SELECT?post_title,?guid?,?path,?post_author,?post_date,?tableid?
?FROM?wp_posts,?wp_blogs?
?WHERE?post_r_site?=1? /*?post_r_site?=1 表示网校下的博文?*/
?AND?post_type?=?'post'? /*??type=post 为博文?*/
?AND?post_status?=?'publish'? /*??博文不是私有博文 ?*/
?AND?wp_blogs.blog_id=wp_posts.tableid?
?AND?wp_blogs.blog_id?NOT?IN?(SELECT?id?FROM?wp_blacklist?WHERE?type='0')?/*?? 博客Id 不再黑名单中?*/
?AND?wp_posts.tableid?NOT?IN?(?SELECT?blog_id?FROM?wp_blogs?WHERE?registered?>?'2010-05-14'?)?? /*?用户注册日期大于05月14日??*/
?AND?wp_posts.post_author?IN?(SELECT?id?FROM?wp_users)? /*??博主用户信息存在?*/
?ORDER?BY?wp_posts.post_date?DESC? /*??按照发表博文的时间做降序排列?*/
?LIMIT?200?
?)FF?
?GROUP?BY?tableid?/*?排除重复用户? 只显示用户的一条博文信息?*/