mysql的索引 优化 前导列

2023-11-18

--组合索引之--前导列----------------------------------------------------------------


1)对于where子句中出现的列要想索引生效,会有一些限制,这就和前导列有关。

2)所谓前导列,就是在创建复合索引语句的第一列或者连续的多列。比如通过:CREATE INDEX comp_ind ON table1(x, y, z)创建索引,那么x,xy,xyz都是前导列,而yz,y,z这样的就不是。下面讲的这些,对于其他数据库或许会有一些小的差别,这里以sqlite为标准。在where子句中,前导列必须使用等于或者in操作,最右边的列可以使用不等式,这样索引才可以完全生效。同时,where子句中的列不需要全建立了索引,但是必须保证建立索引的列之间没有间隙。举几个例子来看吧:

用如下语句创建索引:
CREATE INDEX idx_ex1 ON ex1(a,b,c,d,e,...,y,z);
这里是一个查询语句:
...WHERE a=5 AND b IN (1,2,3) AND c IS NULL AND d='hello'

这显然对于abcd四列都是有效的,因为只有等于和in操作,并且是前导列。


再看一个查询语句:
... WHERE a=5 AND b IN (1,2,3) AND c>12 AND d='hello'

那这里只有a,b和c的索引会是有效的,d列的索引会失效,因为它在c列的右边,而c列使用了不等式,根据使用不等式的限制,c列已经属于最右边。


最后再看一条:
... WHERE b IN (1,2,3) AND c NOT NULL AND d='hello'

索引将不会被使用,因为没有使用前导列,不是从a列开始,这个查询会是一个全表查询。

3)对于between,or,like,都无法使用索引。(like ‘’index%‘’使用索引,like '%index' 百分号在前,不使用索引)

like的使用https://blog.csdn.net/mywaster/article/details/51479772

注:在测试的时候别忘记建立索引了
如 ...WHERE myfield BETWEEN 10 and 20;
这时就应该将其转换成:

    ...WHERE myfield >= 10 AND myfield <= 20;


再如LIKE:...mytable WHERE myfield LIKE 'sql%';;
此时应该将它转换成:

...WHERE myfield >= 'sql' AND myfield < 'sqm'; #第一次遇见,的确可行

用上述的下一种方式  检索速度更快了


    再如OR:...WHERE myfield = 'abc' OR myfield = 'xyz';
此时应该将它转换成:
...WHERE myfield IN ('abc', 'xyz');

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql的索引 优化 前导列 的相关文章

随机推荐

  • [算法] 弗洛伊德算法 找出所有顶点之间最短距离

    package com guigu algorithm floydAlgorithm import java util Arrays author guorui fu versiion 1 0 弗洛伊德算法 本质就是将邻接矩阵中N值填满 时
  • 邮件程序 php_PHP

    PHP 发送电子邮件 PHP 允许您从脚本直接发送电子邮件 PHP mail 函数 PHP mail 函数用于从脚本中发送电子邮件 语法 mail to subject message headers parameters 参数 描述 to
  • Buffer Cache和Page Cache

    概念 如高速缓存 cache 产生的原理类似 在I O过程中 读取磁盘的速度相对内存读取速度要慢的多 因此为了能够加快处理数据的速度 需要将读取过的数据缓存在内存里 而这些缓存在内存里的数据就是高速缓冲区 buffer cache 下面简称
  • element tab-pane切换标签页 自动刷新

    解决方法 在子组件上加 v if
  • Kali如何配置静态IP,并且实现网络访问

    1 本地网络配置 我是使用VMware workstation的桥接网络 配置IP要根据对应的网络模式下对应的网络段进行配置 才能保证Kali与别的主机正常通信 桥接网络模式 我需要先看一下宿主机的网络IP地址 WIN r输入cmd 回车
  • 2013/1工作总结

    这个月抽时间看了C Primer一书 主要原因是没有基础知识直接看ATL的代码根本不可能 感想之一就是程序员也许必须学习一下C 只学习Java或者C 可能对语言的了解有限 造成对某些问题一直没有透彻的理解 当然了 最后发现还要好好学习理解编
  • TCP思维导图

  • GTest源码剖析(四)——TEST_P宏

    GTest源码剖析 TEST P宏 GTest源码剖析TEST P宏 TEST P宏用法 TestWithParam 类 1 TestWithParam 类定义 2 WithParamInterface 模版类定义 INSTANTIATE
  • 使用CURL上传图片至远程服务器(PHP >5.5)

    开头引入 use CURLFile curl文件上传 接收并上传 if FILES data file new CURLFile FILES file1 tmp name image jpeg FILES file1 name 文件流 fi
  • MVP和MVC的区别

    前提回顾 MVC架构 MVC就是Model View Controller 它们的作用是 它们之间的关系如下图所示 View传送指令到Controller Controller完成业务逻辑后 改变Model的状态 Model将新的数据发送到
  • RPC 开发系列一:RPC 基本介绍

    一 什么是 RPC RPC 的全称是 Remote Procedure Call 即远程过程调用 功能 屏蔽远程调用跟本地调用的区别 让我们感觉就是调用项目内的方法 隐藏底层网络通信的复杂性 让我们更专注于业务逻辑 二 RPC 通信流程 发
  • sourceforge文件下载过慢之原始解决方法

    近日 从sourceforge下载文件超线慢 从下午一直下载到网上11点多 居然下不完39MB的资料 百度一下方法有很多 却一个都没成功 比如 http sourceforge mirrorservice org 更是没用 部份有用 因为不
  • __cdecl __stdcall __fastcall区别

    一 三者区别一览表 stdcall cdecl fastcall 参数传递方式 右 gt 左 压栈 右 gt 左 压栈 左边开始的两个不大于4字节 DWORD 的参数分别放在ECX和EDX寄存器 其余的参数仍旧自右向左压栈传送 清理栈方 被
  • 【逆波兰表达式求值】

    逆波兰表达式求值 给你一个字符串数组 tokens 表示一个根据 逆波兰表示法 表示的算术表达式 请你计算该表达式 返回一个表示表达式值的整数 注意 有效的算符为 和 每个操作数 运算对象 都可以是一个整数或者另一个表达式 两个整数之间的除
  • 【SpringBoot框架篇】31.基于分布式锁或xxx-job实现分布式任务调度

    文章目录 1 简介 2 分布式锁实现 2 1 引用依赖 2 2 定义分布式锁注解 2 3 配置切入点和获取锁释放锁逻辑 2 4 测试任务 3 使用分布式任务调度平台xxx job 3 1 下载源码并运行项目 3 2 springBoot项目
  • 微信小程序之授权登录篇

    之前微信授权登录时是直接可以通过getUserInfo接口 弹出授权弹窗 由于微信官方修改了 getUserInfo 接口 所以现在无法实现一进入微信小程序就弹出授权窗口 只能通过 button 去触发 微信的官方解释如下 为优化用户体验
  • React 初识之Umi项目搭建实战

    一 创建项目 创建之前需要安装 Node js 和 npm yarn 这俩个环境 在WebStorm里面创建一个项目 输入命令 yarn create umi 弹出选项 这里我们选择第二项APP 选择是否使用typescript 这里选no
  • JavaScript常用事件讲解

    声明 本人的所有博客皆为个人笔记 作为个人知识索引使用 因此在叙述上存在逻辑不通顺 跨度大等问题 希望理解 分享出来仅供大家学习翻阅 若有错误希望指出 感谢 事件流 事件流描述的是从页面接收事件的顺序 事件冒泡 事件开始由最具体的元素接收
  • c语言统计各类字符个数

    输入十个字符 统计其中英文字母 空格或回车 数字字符和其他字符的个数 7 43 统计字符分数 15 全屏浏览题目 切换布局 作者 颜晖 单位 浙大城市学院 本题要求编写程序 输入10个字符 统计其中英文字母 空格或回车 数字字符和其他字符的
  • mysql的索引 优化 前导列

    组合索引之 前导列 1 对于where子句中出现的列要想索引生效 会有一些限制 这就和前导列有关 2 所谓前导列 就是在创建复合索引语句的第一列或者连续的多列 比如通过 CREATE INDEX comp ind ON table1 x y