加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 百科网 (https://www.baikewang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql索引示例_MYSQL索引实例

发布时间:2023-02-20 13:59:20 所属栏目:MySql教程 来源:
导读:  MYSQL描述:

  一个文章库,里面有两个表:category和article。category里面有10条分类数据。article里面有 20万条。article里面有一个"article_category"字段是与category里的"category_id"字段相对应的。
  MYSQL描述:
 
  一个文章库,里面有两个表: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 article
 
  where article_category=2
 
  or article_category=3
 
  order by article_id desc
 
  limit 5
 
  执行时间:11.0777
 
  解决方案:避免使用in 或者 or (or会导致扫表)mysql表索引,使用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 desc
 
  limit 5
 
  执行时间:0.0261
 

(编辑:百客网 - 百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!