Heim  >  Artikel  >  Datenbank  >  关于MYSQL索引优化和in or替换为union all的问题_MySQL

关于MYSQL索引优化和in or替换为union all的问题_MySQL

WBOY
WBOYOriginal
2016-06-01 13:42:051208Durchsuche

bitsCN.com
一个文章库,里面有两个表:category和article。category里面有10条分类数据。article里面有 20万条。

article里面有一个"article_category"字段是与category里的"category_id"字段相对应的。 article表里面已经把 article_category字义为了索引。数据库大小为1.3G。
 问题描述:
 执行一个很普通的查询: Select * FROM `article` Where article_category=11 orDER BY article_id DESC LIMIT 5 。执行时间大约要5秒左右 解决方案:
 建一个索引:create index idx_u on article (article_category,article_id);Select * FROM `article` Where article_category=11 orDER BY article_id DESC LIMIT 5 减少到0.0027秒     继续问题:Select * FROM `article` Where article_category IN (2,3) orDER BY article_id DESC LIMIT 5 执行时间要11.2850秒。
 使用OR:select * from articlewhere article_category=2or article_category=3order by article_id desclimit 5执行时间:11.0777   解决方案:避免使用in 或者 or (or会导致扫表),使用union all 使用UNION ALL:(select * from article where article_category=2 order by article_id desc limit 5)UNION ALL (select * from article where article_category=3 order by article_id desc limit 5)orDER BY article_id desclimit 5执行时间:0.0261
  作者 adparking bitsCN.com

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn