`
lzj0470
  • 浏览: 1273465 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Mysql中索引和UNION ALL的使用

阅读更多
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会导致扫表),使用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
分享到:
评论

相关推荐

    MySQL中使用or、in与union all在查询命令下的效率对比

    在MySQL数据库中,进行数据查询时,我们经常需要使用到`OR`、`IN`和`UNION ALL`这些操作符。这些操作符在不同的场景下有不同的效率表现,但并不是像网络上普遍认为的那样,`UNION ALL`总是比`OR`和`IN`更快。实际上...

    MySQL的or、in、union与索引优化

    本文将基于一个具体的业务场景来探讨在MySQL中使用`union all`、`in`、`or`以及负向查询(如`!=`)时如何有效地利用索引。 #### 一、`union all`肯定能命中索引 假设有一个名为`order`的订单业务表,其结构如下: ...

    使用UNION ALL代替IF语句的合并处理案例

    当然,这并不意味着在所有情况下都应避免使用`UNION ALL`,在某些复杂查询或数据聚合场景中,`UNION ALL`仍有其独特的优势。在实际应用中,应结合具体需求和系统性能,灵活选择适合的处理方式。

    5分钟了解MySQL5.7中union all用法的黑科技

    总结以上内容,本文主要讲述了MySQL中UNION ALL用法的基本概念、在不同版本的MySQL中UNION ALL的性能差异,以及如何通过理解执行计划来优化数据库操作。此外,还提到了与MariaDB的对比以及OCR扫描技术可能带来的问题...

    MySQL中or、in、union与索引优化详析

    在MySQL数据库中,索引优化是提升查询性能的关键。本文主要探讨了`OR`、`IN`、`UNION`操作符以及它们如何与索引交互,以...对于复杂查询,尤其是涉及子查询和多个条件的组合,要特别注意索引的使用和可能的性能瓶颈。

    MySQL数据库索引失效的10种场景.zip

    如果查询中的列和索引的类型不完全匹配,如整数和字符串的比较,MySQL可能无法使用索引。确保数据类型的一致性很重要。 **9. GROUP BY和ORDER BY** 在使用GROUP BY和ORDER BY时,如果未指定的所有列都在索引中,且...

    mysql中or是否走索引详解

    4. **使用`UNION`替代`OR`**:有时,将`OR`语句重构为多个`UNION`或`UNION ALL`子查询可能更高效。每个子查询可以独立利用其条件对应的索引。 5. **避免`NULL`值**:索引对`NULL`值的处理方式特殊,`NULL`值不会被...

    MYSQL执行计划及索引最佳实践

    - **KEY_LEN**:表示索引中使用的字节数,可用于计算查询中使用的索引的长度。 - **REF**:显示使用的参考列或常量。 - **ROWS**:估计被查询的行数。 - **EXTRA**:包含无法在其他列中显示的附加信息。 #### 二、...

    导致MySQL索引失效的一些常见写法总结

    可以尝试使用`UNION ALL`或重构查询来避免这个问题。 8. **类型不匹配**:如果查询中的列与索引列的数据类型不匹配,如字符串和整数之间的比较,索引可能不会被使用。 9. **NULL值处理**:索引通常不包含`NULL`值...

    mysql 优化.docx

    本文将从EXPLAIN命令、SQL语句优化、索引的使用、排序和限制、union和union all的差异、ORDER BY RAND()的优化、in和exists的区分、分页方式的优化、分段查询等角度来讨论MySQL优化策略。 一、EXPLAIN命令的使用 ...

    mysql_adv_select.rar_any left join_union

    此外,避免在`WHERE`子句中使用`LIKE`操作符或非索引字段,这可能导致全表扫描,降低查询效率。 总结起来,`LEFT JOIN UNION ALL`的组合使用在处理多表数据时提供了极大的灵活性,尤其在需要根据用户需求动态获取和...

    mysql面试专题.pdf

    MySQL索引的工作机制基于B树及其变种B+树的数据结构,以协助快速查询和更新。 基础操作命令中,可以使用特定的命令来检查MySQL是否运行中,如在Debian系统中使用service mysql status,在RedHat系统中使用service ...

    MySQL索引用法实例分析

    MySQL索引是数据库管理系统中用于加速数据检索的一种数据结构,它可以显著提高查询性能。本篇文章主要探讨了在MySQL中如何有效使用索引以及在特定情况下优化查询的方法。 首先,我们来看一个实例,其中包含两个表:...

    mysql索引使用率监控技巧(值得收藏!)

    - **使用索引提示**:在查询中使用`FORCE INDEX`或`USE INDEX`来指定应使用的索引,但需谨慎,因为这可能会阻止优化器选择最佳的索引。 监控和分析MySQL索引使用率可以帮助识别性能瓶颈,进而优化查询,提升数据库...

    计算机二级《MySQL数据库程序设计》知识点总结.pdf

    - 子查询与组合查询:在WHERE子句中使用子查询,或者使用UNION和UNION ALL进行多个SELECT语句结果的合并。 2. 表操作: - 表的创建:使用CREATE TABLE语句创建新的表,可以定义表结构,包括字段名称、数据类型和...

    MySQL中索引失效的常见场景与规避方法

    推荐避免让字段允许`NULL`值,设置为`NOT NULL`并提供默认值,以简化索引的使用和优化。 4. **函数操作**: 使用函数如`DATE_ADD`、`CAST`等直接作用于索引列会导致索引失效,因为MySQL无法直接使用索引进行查找。...

Global site tag (gtag.js) - Google Analytics