mysql的联合索引的误解】的更多相关文章

https://www.zhihu.com/question/36996520 之前对于联合索引有一个误区, 假设 name,age为一个联合索引 5条索引记录 a 10 b 5 c 12 c 15 d 2 当查找 where name='a' and age=10的时候能利用这个联合索引,为什么 where name>'a' and age=5 就只能使用到联合索引的部分索引,指第一个索引呢? 其实还是对联合索引的性质不熟悉,网上找了资料 mysql创建复合索引的规则是首先会对复合索引的最左边…
  当一个表有多条索引可走时,  Mysql  根据查询语句的成本来选择走哪条索引, 联合索引的话, 它往往计算的是第一个字段(最左边那个), 这样往往会走错索引. 如: 索引Index_1(Create_Time, Category_ID), Index_2(Category_ID) 如果每天的数据都特别多, 而且有很多category, 但具体每个category的记录不会很多. 当查询SQL条件为select -where create_time -.and category_id=..时…
在Mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先. 如果我们建立了一个2列的联合索引(col1,col2),实际上已经建立了两个联合索引(col1).(col1,col2); 如果有一个3列索引(col1,col2,col3),实际上已经建立了三个联合索引(col1).(col1,col2).(col1,col2,col3). 解释 1.b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+树是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的…
有一个业务是查询最新审核的5条数据 SELECT `id`, `title` FROM `th_content` WHERE `audit_time` < 1541984478 AND `status` = 'ONLINE' ORDER BY `audit_time` DESC, `id` DESC LIMIT 5; 查看当时的监控情况 cpu 使用率是超过了100%,show processlist看到很多类似的查询都是处于create sort index的状态. 查看该表的结构 CREAT…
创建联合索引时列的选择原则 经常用的列优先(最左匹配原则) 离散度高的列优先(离散度高原则) 宽度小的列优先(最少空间原则) 在Mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先.如果我们建立了一个2列的联合索引(col1,col2),实际上已经建立了两个联合索引(col1).(col1,col2);如果有一个3列索引(col1,col2,col3),实际上已经建立了三个联合索引(col1).(col1,col2).(col1,col2,col3). 解释 1.b+树的数据项是复合的…
​ mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误: ​ 从上图中,我们可以看出,使用的是innodb及字符集.错误提示是长度太长了:Specified key was too long; max key length is 767 bytes 来查看下创建表的语句: CREATE TABLE `xxl_job_registry` ( `id` int(11) NOT NULL AUTO_INCREMENT, `registry…
先建表 CREATE TABLE `menu_employee` ( `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键,无实际意义', `employee_pid` int(5) DEFAULT NULL COMMENT '父节点序号,通常是部门的序号,可是已有例外,没有组的员工', `employee_id` int(5) DEFAULT NULL COMMENT '员工序号,对应的部门序号+员工序号', `employee_name` va…
以 index(a, b, c) 为例: 语句 发挥作用的索引 记忆方法(以三块板子过河记忆, 顺序很重要) WHERE a=3 只用到了a列 只走了a板子 WHERE a=3 AND b=5 使用了a.b列 只走了ab两块板子 WHERE a=3 AND b=4 AND c=5(不论顺序) 使用了a.b.c列 走了所有的板子 WHERE b=4 AND c=5 或 WHERE b=4 否 因为a板子没走,所以衔接不上b和c板子 WHERE a=3 AND c=5 用到a,没用到c 只走了a,b…
前言 之前看了很多关于MySQL索引的文章也看了<高性能MySQL>这本书,自以为熟悉了MySQL索引使用原理,入职面试时和面试官交流,发现对复合索引的使用有些理解偏颇,发现自己的不足整理一下这方面的内容. 实例表: CREATE TABLE `test` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `uId` int(10) unsigned NOT NULL, `chatId` smallint(5) unsigned NOT N…
发现index merge局限性,优化器会自动判断是否使用 index merge 优化技术,查询还是需要组合索引[推荐阅读:对mysql使用索引的误解] MySQL单列索引和组合索引(联合索引)的区别详解初始我写这篇文章的原因在于面试到一家大的游戏公司的时候,一个面试题大致的内容是怎么加速这个where a=’1′ 和 where a=’1′ and b=’2′,当时我答题的时候回答的是a加索引,a和b加联合索引.面试官跟我聊题目的时候说 where a=’1′ and b=’2′ 在加一个b…