mysql关于or的索引的问题及解决

 更新时间:2023年08月30日 10:05:00   作者:某科学的南条  
这篇文章主要介绍了mysql关于or的索引的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql关于or的索引问题

用UNION替换OR (适用于索引列)

在下面的例子中,LOC_ID 和REGION上都建有索引*

高效:

select loc_id , loc_desc , region from location where loc_id = 10   
union   
select loc_id , loc_desc , region  from location where region = "melbourne"   

低效:

select loc_id , loc desc , region from location where loc_id = 10 or region = "melbourne" 

如果你坚持要用OR,那就需要返回记录最少的索引列写在最前面。

mysql or不走索引分析

select * from tableName where a=1 and (b=1 or c=1)

其中建立了ab和ac的联合索引,但是看db监控慢查询的扫描行数和a=1的行数相同。

通过explain看出执行计划是走ab的联合索引,但是为啥扫描行数却是a=1的行数呢?

猜测是因为要查a=1 and b=1的数据时候,可以走ab索引,但是查出 a=1和c=1的数据,就需要扫描a=1的所有数据。

可以通过联合索引的数据结构看出,当a相同时候,会按照b来排序。

而且mysql一般不会选择走多个索引,除非要索引合并,但是通过explain看出来并没有索引合并。

所以只会走ab的索引&扫描a=1的所有数据来获取c=1的数据。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 服务器不支持 MySql 数据库的解决方法

    服务器不支持 MySql 数据库的解决方法

    出现问题:报错“服务器不支持 MySql 数据库”,改函数function_exists('mysql_connect')返回 false
    2013-03-03
  • Mysql 5.7.19 免安装版配置方法教程详解(64位)

    Mysql 5.7.19 免安装版配置方法教程详解(64位)

    这篇文章主要介绍了Mysql 5.7.19 免安装版配置方法教程详解,需要的朋友可以参考下
    2017-08-08
  • 解决MySQL安装重装时出现could not start the service mysql error:0问题的方法

    解决MySQL安装重装时出现could not start the service mysql error:0问题的方法

    这篇文章主要为大家详细介绍了解决MySQL安装重装时出现could not start the service mysql error:0问题的方法,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • MySQL如何配置my.ini文件

    MySQL如何配置my.ini文件

    文章介绍了如何修改my.ini文件以解决数据库忘记密码或其他基础问题,首先,需要停止数据库服务,然后创建并编辑my.ini文件,设置数据库字符集、缓冲池大小等参数,接着,删除旧的data文件夹并重新生成,配置my.ini文件时要注意命名规范
    2025-01-01
  • Mysql时间轴数据 获取同一天数据的前三条

    Mysql时间轴数据 获取同一天数据的前三条

    这篇文章主要介绍了Mysql时间轴数据 获取同一天数据的前三条 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • mysql中mydumper 和 mysqldump 对比使用

    mysql中mydumper 和 mysqldump 对比使用

    MySQL数据库备份工具有其自带的mysqldump,属于mysql官方的一款备份工具。但是第三方备份工具mydumper凭借优越的特点为更多人所使用。下面就通过测试验证它们之间的备份效率。
    2017-05-05
  • Mysql关于数据库是否应该使用外键约束详解说明

    Mysql关于数据库是否应该使用外键约束详解说明

    MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表,外键所在的表就是从表。外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性
    2021-10-10
  • MySQL数据库之事务简析

    MySQL数据库之事务简析

    这篇文章主要介绍了MySQL数据库之事务简析,MySQL数据库中的事务是一组数据库操作,它们被视为一个整体,要么全部执行成功,要么全部失败回滚,MySQL支持四种事务隔离级别,其中默认的事务隔离级别是REPEATABLE READ,需要的朋友可以参考下
    2023-09-09
  • MySQL分库分表与分区的入门指南

    MySQL分库分表与分区的入门指南

    这篇文章主要给大家介绍了关于MySQL分库分表与分区的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • MySQL获取数据库内所有表格数据总数的示例代码

    MySQL获取数据库内所有表格数据总数的示例代码

    在 MySQL 中,要获取数据库内所有表格的数据总数,可以编写一个查询脚本来遍历每个表并计算其行数,所以本文给大家介绍了MySQL获取数据库内所有表格数据总数的示例,需要的朋友可以参考下
    2024-11-11

最新评论