like百分号加前面一定不走索引吗?

正常来讲,我们都知道在mysql的like查询中,百分号加在关键词后面是走索引的,比如 select * like "张三%",而百分号在前面是不走索引的,比如 select * like "%张三",但也有例外。如果你的字段有id,a,b,c四列。而你对abc三列加了索引的话。那无论如何,like都会走索引的。因为如果能走覆盖索引的话。mysql会优先走覆盖索引。

同时,如果id,a,b,c四列,仅对a列做了索引,select a from table where a like "%张三%"也同样是会走覆盖索引的

like如果走了索引,或者范围查询后面的字段还走不走索引?

假设abc加了索引,select a from table where a like "张三%" and b = 18,那b走不走索引?不一定,根据索引的底层原理,a字段是确定值,b字段才会走索引。所以范围查询后面不走索引只是一个偷懒的说法。如果范围查询过后的a是个确定值,那后面还是走索引的,否则不走

abc创建了索引,where条件和索引顺序不一致走不走索引?

abc创建了索引,select * from table where a = 1 and c = 3 and b = 2 走不走索引?走的,mysql底层会针对sql语句进行一定的优化。该sql几个and的顺序调整对最终结果的正确性没有影响,但却会走不走索引的查询效率影响较大。sql很乐意做这样的优化

or走不走索引?

我们经常会听到or走索引,或者or不走索引的简单说法,其实这里是分情况的
如果针对某个字段的or是走索引的,比如 select * from table where ( a = '3' or a = '4') ;
如果针对多个字段的or是不走索引的,比如 select * from table where ( a = '3' or b = 4) ;

排序走不走索引?

select * from table where a = '张三' and b = 18 order by c asc,排序字段c走不走索引?走的!
abc正好顺序的出现在组合索引当中,但有个点要注意的是,如何知道排序走没走索引。一般走没走索引通过explain当中的key能看出来。但在刚才的sql中,由于a已经走了索引,c走不走索引无法通过key看出来,而只能通过extra中的信息来看,如果extra出现了filesort说明没有用到索引。

引申一下,和c的场景类似,如果知道b走没有索引。只能通过和单独a条件,比较key_len来确定,如果b走了索引,key_len是会变长的。否则没走

提防隐式转换

有一种比较低级错误,比如我有个字段名a,保存内容为年龄,但是误用了varchar字段,那 select a from table where a = 18,走不走索引?不走的,虽然mysql很智能,这个sql没有报错,但是mysql为此针对列a做了字符串到数字的转换,我们都知道一旦针对某个字段做了函数转换,那就不走索引了。再引申一下,索引失效以后 update table set b = 10086 where a = 18,由于索引失效,针对a的查询需要全表扫描,针对a的修改又需要加写锁。所以本来的行级写锁变为了表级写锁。并发能力大大降低!

mysql datetime month不走索引_like百分号加前面一定不走索引吗?一不小心就翻车,关于mysql索引那些容易错的点...相关推荐

  1. MySQL锁机制,行锁jingran加在索引上

    锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制,应该都不陌生.?但在这之前我们先来看看并发控制,理清MVCC多版本并发控制和锁的关系,这也是之前我很迷惑的一个点 并发控制技术 在数据库中, ...

  2. [转]MySQL锁机制,行锁竟然加在索引上!!!

    原文作者qq_40174198 原文连接:MySQL锁机制,行锁竟然加在索引上!- https://blog.csdn.net/qq_40174198/article/details/11183548 ...

  3. mysql生产环境加索引_【生产篇】_MySQL环境下如何查看基于表的索引定义

    [引言] 今天中午项目组来一需求,欲在MySQL环境的某张表下创建几个BTREE索引.要创建索引,首先需要了解基表的表结构,以及已经包含的索引.Oracle的表结构大家都很熟悉,但MySQL表结构和已 ...

  4. mysql datetime 默认值_老大让我整理下公司内部MySQL使用规范,分享给大家

    作者:白程序员的自习室 链接:https://www.studytime.xin/article/mysql-internal-specifications.html 最近涉及数据库相关操作较多,公司 ...

  5. mysql weekofmonth_深入mysql YEAR() MONTH() DAYOFMONTH()日期函数的详解

    深入mysql YEAR() MONTH() DAYOFMONTH()日期函数的详解 mysql的日期函数. 例子中当前日期:curdate() 是2013年6月24日. YEAR() :显示年mys ...

  6. mysql datetime 对于hbm_MySQL库表设计小技巧

    前言: 在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名.字段名命名混乱.字段类型设计混乱等等,此类数据库后续极难维护与拓展.我一直相信只有优秀的库表设计 ...

  7. mysql多表连接 索引_MySQL多表查询之外键、表连接、子查询、索引

    一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...

  8. mysql重新载入my.cnf_怎么重新加载MySQL的my.cnf?

    服务器版本:CentOS Linux release 7.4.1708 (Core) MySQL版本:5.7.21 ---- 源码安装$ mysqlERROR 2002 (HY000): Can't  ...

  9. c# datetime._C#| DateTime.Month属性与示例

    c# datetime. DateTime.Month属性 (DateTime.Month Property) DateTime.Month Property is used to get the m ...

最新文章

  1. 当我们在讨论奢侈品行业时,人工智能可以做什么?
  2. r怎么保存html文件,leaflet - 为什么在已保存的html文件中缺少传单地图上的杂项,但在Rstudio浏览器中可以正常打印呢? - 堆栈内存溢出...
  3. Android NDK
  4. Docker最全教程——数据库容器化之持久保存数据(十一)
  5. [转]jQuery设计思想
  6. c程序设计语言 练习1-6,C程序设计语言:第一章练习
  7. *【CodeForces - 1150D】Three Religions(dp,预处理,思维)
  8. 数字金额转为大写金额(C#)
  9. 译: 6. 任务调度(定时执行任务)
  10. 一个前端博客(7)——事件绑定和移除事件
  11. 使用CTex排版IEEE论文笔记
  12. 二进制搜索树(BSTs) 和AVL 树
  13. pow函数python_pythonpow函数怎么用
  14. Gromacs—GMX
  15. 快速学习Spring Boot
  16. linux桌面无法启动,Ubuntu18.04启动后无法进入桌面修复方法(图文)
  17. 软件测试学习笔记_第1周第5天——缺陷管理、术语
  18. windows文件服务器双机热备_实战教程:如何建立双机热备系统
  19. 联想Z475有时候不能连接无线
  20. jupyterhub 安装教程

热门文章

  1. axure实现搜索功能_vue实现模糊搜索功能
  2. mysql 端口time_wait_linux上大量tcp端口处于TIME_WAIT的问题
  3. Tecplot如何导入多个DAT文件后激活solution time按钮
  4. stm32l0的停止模式怎么唤醒_Mac外接显示器的显示模式怎么设置
  5. 计算机视觉子方向,计算机视觉方向简介 | 人脸识别中的活体检测算法综述
  6. Ubuntu 14.04 为 root 帐号开启 SSH 登录
  7. MTU MSS 详解记录
  8. mac远程redis_Linux:使用Mac远程(局域网内)访问Ubuntu主机上的Redis服务
  9. python访问共享文件夹 exist false_python os.path.exists()对于存在的nfs挂载目录文件失败...
  10. win8安装python3后不能编程_Win8.1 64位系统,python3.4 肿么安装gevent成功后不能用