索引优点

  1. 减少服务器需要扫描的数据量
  2. 帮助服务器避免排序和临时表
  3. 将随机IO编程顺序IO

应用场景

  1. 快速匹配where字句的行
  2. 从consideration中消除行,如果可以在多个索引之间进行选择,mysql通常会使用找到最少行的索引(也就是多个索引中找更好的索引进行使用)
  3. 如果表具有多列索引,则优化器可以使用任何最左前缀来进行查询(最左匹配原则)
  4. 当有表连接时,从其他表检索行数据
  5. 查找特定索引列的max和min值
  6. 如果排序或分组时在可用索引的最左前缀上完成的,则对表进行排序和分组
  7. 在某些情况下,可以优化查询以检索值而无需查询数据行

索引分类

  1. 主键索引
  2. 唯一索引
  3. 普通索引
  4. 全文索引
  5. 组合索引

面试技术词

  1. 回表
  2. 覆盖索引
  3. 最左匹配
  4. 索引下推

索引采用的数据结构

  1. 哈希表
  2. B+ 树

索引匹配方式

  1. 全值匹配
    explain : type key ref

  2. 匹配最左前缀

  3. 匹配列前缀
    name like ‘aa%’

  4. 匹配范围值
    name > ‘但是对’

  5. 精确匹配某一列 并范围匹配到另一列(索引:name+ge)
    name =‘hhe’ and age > 18

  6. 只访问索引的查询 (索引覆盖 Extra中显示 )

Hash索引

一、 hash索引优点

  1. 基于Hash索引的实现,只有精确匹配索引所有列的查询才有效
  2. 在Mysql中 只有memory存储引擎显式支持hash索引
  3. 哈希索引自身只存储对应的hash值,所以索引的结构十分紧凑,这让hash索引的查找速度非常的快

二、 hash索引限制

  1. hash索引只包含hash值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行
  2. hash索引数据并不是按照索引值顺序存储的,所以无法进行排序
  3. hash索引不支持部分列表匹配查询,hash索引是使用索引列的全部内容来计算hash值
  4. hash索引支持等值比较 不支持任何范围查询
  5. 访问hash索引的数据非常快,除非有很多hash冲突,出现hash冲突时,hash索引必须遍历链表中的所有值进行比较,直到找到所有符合条件的行
  6. hash冲突比较多的话,维护代价也会比较高

三、hash索引案例

  1. 当需要存储大量的URL,并且根据URL进行行所搜查找,如果使用B+树,存储的内容就会很大
    select id from urls where url = ‘xxx’
  2. 可以将url使用CRC32做hash
    select id from urls where url = ‘xxx’ and crc = crc32(‘xxx’)
    这个查找的效率高 是因为使用了体积很小的索引来完成查找

组合索引

  1. 当包含多个列作为索引,需要注意的是正确的顺序依赖于该索引的查询,
    同时需要考虑如何更好的满足排序和分组的需要
  2. 案例
-- 创建表
CREATE TABLE `dd` (`d1` varchar(255) DEFAULT NULL,`d2` varchar(255) DEFAULT NULL,`d3` varchar(255) DEFAULT NULL,`d4` varchar(255) DEFAULT NULL,KEY `index_dd` (`d1`,`d2`,`d3`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- 插入数据
-- ----------------------------
INSERT INTO `dd` VALUES ('1', '1', '1', '1');
INSERT INTO `dd` VALUES ('2', '2', '2', '2');
INSERT INTO `dd` VALUES ('3', '3', '3', '3');
INSERT INTO `dd` VALUES ('4', '4', '4', '4');
-- 查看索引使用情况
explain select * from dd where d1='1' -- 使用了 d1
explain select * from dd where d1='1' and d2='2' -- 使用了 d1 d2
explain select * from dd where d1='1' and d2='2' and d3='3' -- 使用了 d1 d2 d3
explain select * from dd where d1='1' and d3='3' and d2='2' -- 使用了 d1 d2 d3
explain select * from dd where d3='3' and d1='1' and d2='2' -- 使用了 d1 d2 d3 explain select * from dd where d1='1'  and d3='3'-- 使用了 d1
explain select * from dd where d2= '1' and d3='2 ' -- 没使用索引
explain select * from dd where d1='1' and d2 like '%df%' and d3='23'  -- 使用了 d1
explain select * from dd where d1='1' and d2 >'2323' and d3='23'  -- 使用了 d1 d2 

聚簇索引 & 非聚簇索引

一、 聚簇索引

  1. InnoDB
  2. 放同一个文件
  3. 不是单独的索引类型,而是一种数据存储方式,指的是数据行跟相邻的键值紧凑的存储在一起
  4. 优点
    4.1
    可以把相关数据存储在一起
    4.2
    数据访问更快,因为索引和数据保存在同一个树中
    4.3
    使用覆盖索引扫描查询可以直接使用叶节点的主键值
  5. 缺点
    5.1
    聚簇索引最大限度的提高了IO密集型应用的性能,如果数据全部在内存,那么聚簇索引就没有什么优势
    5.2
    插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式
    5.3
    更新聚簇索引列的代价很高,因为会强制将每个被更新的行移动到新位置
    5.4
    基于局促索引的表,在插入新行或者主键被更新导致需要移动行的时候,可能面临页分裂的问题
    5.5
    聚簇索引可能导致全表扫描变慢,尤其是行比较稀疏,或者由于页分裂导致数据存储不连续的时候

二、非聚簇索引

  1. MyISAM
  2. 放不同文件
  3. 数据文件与索引是分开文件存放的

覆盖索引

1. 基本介绍

  1. 如果一个索引包含所有需要查询的字段值,我们称之为覆盖索引
  2. 不是所有类型的索引都可以称之为覆盖索引,覆盖索引必须要存储索引列的值
  3. 不同的存储实现覆盖索引的方式不同,不是所有的引擎都支持覆盖索引,memory 不支持覆盖索引

2. 优势

  1. 索引的条目通常远小于数据行大小,如果只需要读取索引,那么mysql就会极大的减少数据访问量
  2. 因为索引是按照值顺序存储的,所以对于IO密集型的范围查找会比随机从磁盘读取一行数据的IO要少的多
  3. 一些存储引擎如MyISAM 的内存中只缓存索引,数据则依赖于操作系统存储,因此要访问数据需要一次系统调用,这会导致很严重的性能问题
  4. 由于Innodb 是聚簇索引,覆盖索引对Innodb表特别有用

3.案例

explain 的时候 Extra中会看到using index

-- 还是dd表
explain select d1,d2 from dd  

优化小细节

  1. 当使用索引列进行查询时,尽量不要使用表达式,把计算放到业务层而不是数据层 where rid+1=5
  2. 尽量使用主键查询,而不是其他索引,因为主键查询不会触发回表
  3. 使用前缀索引
  4. 使用索引扫描来排序
    不使用索引Extra 会显示Using filestore

前缀索引

  1. 说明
           有时候需要索引很长的字符串,这会让索引变得大而且慢,通常情况下可以使用某个列开始的部分字符串,这样大大的节约了索引的空间,从而提高索引效率,
           但这样会降低索引的选择性,索引的选择性是指,不重复的索引值和数据表记录总数的比值,范围从1/总数~1 。
           索引的选择性越高则查询效率越高,因为选择性更高的索引可以让mysql在查找的时候过滤掉更多的行
           一般情况下,某个列前缀的选择性也是足够的,足以满足查询性能,但是对应BLOB,TEXT,VARCHAR类型的字段,必须要使用前缀索引,因为mysql不允许索引这些列的完整长度。使用该方法的诀窍就是选择足够长的前缀,以保证比较高的选择性,但是又不能太长

  2. 实战

1.创建一个测试表
2.插入数据SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for aa
-- ----------------------------
DROP TABLE IF EXISTS `aa`;
CREATE TABLE `aa` (`name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of aa
-- ----------------------------
INSERT INTO `aa` VALUES ('12320203b0f3ec2last_name');
INSERT INTO `aa` VALUES ('1232020245925aflast_name');
INSERT INTO `aa` VALUES ('123202098c683eelast_name');
INSERT INTO `aa` VALUES ('123202025b6d30alast_name');
INSERT INTO `aa` VALUES ('123202065fbdacblast_name');
INSERT INTO `aa` VALUES ('12320205fb33b82last_name');
INSERT INTO `aa` VALUES ('1232020a0d4f085last_name');
INSERT INTO `aa` VALUES ('12320203eff4b2alast_name');
INSERT INTO `aa` VALUES ('1232020fd48941alast_name');
INSERT INTO `aa` VALUES ('1232020f3ed51e9last_name');
INSERT INTO `aa` VALUES ('1232020887ebe2clast_name');
INSERT INTO `aa` VALUES ('1232020bed798d5last_name');
INSERT INTO `aa` VALUES ('123202059b58e58last_name');
INSERT INTO `aa` VALUES ('1232020a95d868elast_name');
INSERT INTO `aa` VALUES ('123202046a8ac49last_name');
INSERT INTO `aa` VALUES ('123202095605352last_name');
INSERT INTO `aa` VALUES ('12320205fb29196last_name');
INSERT INTO `aa` VALUES ('12320204c44b47elast_name');
INSERT INTO `aa` VALUES ('1232020a228fc48last_name');
INSERT INTO `aa` VALUES ('123202006d19381last_name');
INSERT INTO `aa` VALUES ('1232020a4e65f10last_name');
INSERT INTO `aa` VALUES ('12320201f25b0e5last_name');
INSERT INTO `aa` VALUES ('123202025d0fbbflast_name');
INSERT INTO `aa` VALUES ('12320206688fe3alast_name');
INSERT INTO `aa` VALUES ('12320201f4c57d3last_name');
INSERT INTO `aa` VALUES ('12320201f75610flast_name');
INSERT INTO `aa` VALUES ('1232020f9b69db0last_name');
INSERT INTO `aa` VALUES ('123202091640e93last_name');
INSERT INTO `aa` VALUES ('12320206120727elast_name');
INSERT INTO `aa` VALUES ('1232020eb3cdf70last_name');
INSERT INTO `aa` VALUES ('12320208ead9616last_name');
INSERT INTO `aa` VALUES ('123202037011dd4last_name');
INSERT INTO `aa` VALUES ('1232020430764b3last_name');
INSERT INTO `aa` VALUES ('12320206b9fe8eflast_name');
INSERT INTO `aa` VALUES ('1232020b98508dalast_name');
INSERT INTO `aa` VALUES ('12320200610229alast_name');
INSERT INTO `aa` VALUES ('1232020bd82363flast_name');
INSERT INTO `aa` VALUES ('123202010a3b009last_name');
INSERT INTO `aa` VALUES ('123202015c9fea2last_name');
INSERT INTO `aa` VALUES ('123202008b1374dlast_name');
INSERT INTO `aa` VALUES ('1232020462509bclast_name');
INSERT INTO `aa` VALUES ('123202057d76f95last_name');
INSERT INTO `aa` VALUES ('1232020c568540alast_name');
INSERT INTO `aa` VALUES ('1232020d10d24c2last_name');
INSERT INTO `aa` VALUES ('1232020f20974e9last_name');
INSERT INTO `aa` VALUES ('1232020f8f32442last_name');
INSERT INTO `aa` VALUES ('123202096af2ba0last_name');
INSERT INTO `aa` VALUES ('12320201f2a5ae5last_name');
INSERT INTO `aa` VALUES ('123202024bbb5dclast_name');
INSERT INTO `aa` VALUES ('1232020a70179b1last_name');
INSERT INTO `aa` VALUES ('12320209d16b982last_name');
INSERT INTO `aa` VALUES ('1232020551d6cdclast_name');
INSERT INTO `aa` VALUES ('1232020d7b7b7f6last_name');
INSERT INTO `aa` VALUES ('12320208cf659e0last_name');
INSERT INTO `aa` VALUES ('1232020ca237fa7last_name');
INSERT INTO `aa` VALUES ('12320204d26e236last_name');
INSERT INTO `aa` VALUES ('1232020cd555160last_name');
INSERT INTO `aa` VALUES ('1232020501eaadalast_name');
INSERT INTO `aa` VALUES ('12320207c03788dlast_name');
INSERT INTO `aa` VALUES ('1232020ee4b222dlast_name');
INSERT INTO `aa` VALUES ('123202080ffbc59last_name');
INSERT INTO `aa` VALUES ('12320209b658a0alast_name');
INSERT INTO `aa` VALUES ('1232020659dd38elast_name');
INSERT INTO `aa` VALUES ('1232020247edf6blast_name');
INSERT INTO `aa` VALUES ('1232020d7245d5clast_name');
INSERT INTO `aa` VALUES ('12320208694fde8last_name');
INSERT INTO `aa` VALUES ('1232020fa022d9elast_name');
INSERT INTO `aa` VALUES ('1232020d7f89e8flast_name');
INSERT INTO `aa` VALUES ('123202082ce6437last_name');
INSERT INTO `aa` VALUES ('1232020181f1893last_name');
INSERT INTO `aa` VALUES ('1232020e8b4af51last_name');
INSERT INTO `aa` VALUES ('1232020f34c0365last_name');
INSERT INTO `aa` VALUES ('123202023f04ed4last_name');
INSERT INTO `aa` VALUES ('1232020071c1945last_name');
INSERT INTO `aa` VALUES ('12320204b8b14aalast_name');
INSERT INTO `aa` VALUES ('1232020360fd7bflast_name');
INSERT INTO `aa` VALUES ('12320201428b64clast_name');
INSERT INTO `aa` VALUES ('1232020ee15bcb1last_name');
INSERT INTO `aa` VALUES ('123202064ad5a15last_name');
INSERT INTO `aa` VALUES ('12320207352ca97last_name');
INSERT INTO `aa` VALUES ('1232020d86ecdbblast_name');
INSERT INTO `aa` VALUES ('1232020bd900258last_name');
INSERT INTO `aa` VALUES ('1232020dc8cdadclast_name');
INSERT INTO `aa` VALUES ('12320208b167d97last_name');
INSERT INTO `aa` VALUES ('1232020bab86303last_name');
INSERT INTO `aa` VALUES ('12320200e33e57flast_name');
INSERT INTO `aa` VALUES ('12320202702998clast_name');
INSERT INTO `aa` VALUES ('1232020ac8aeb90last_name');
INSERT INTO `aa` VALUES ('12320209f525377last_name');
INSERT INTO `aa` VALUES ('12320201b87e334last_name');
INSERT INTO `aa` VALUES ('1232020438a7df7last_name');
INSERT INTO `aa` VALUES ('12320203bf1bdcclast_name');
INSERT INTO `aa` VALUES ('12320200e62e8d4last_name');
INSERT INTO `aa` VALUES ('12320205e92c929last_name');
INSERT INTO `aa` VALUES ('123202000d4746elast_name');
INSERT INTO `aa` VALUES ('1232020056cfdc1last_name');
INSERT INTO `aa` VALUES ('123202039a74740last_name');
INSERT INTO `aa` VALUES ('1232020e38f6a26last_name');
INSERT INTO `aa` VALUES ('123202092f6b218last_name');
INSERT INTO `aa` VALUES ('123202086683a5elast_name');
INSERT INTO `aa` VALUES ('123202045657f54last_name');
INSERT INTO `aa` VALUES ('123202064031a57last_name');
INSERT INTO `aa` VALUES ('12320208c82c051last_name');
INSERT INTO `aa` VALUES ('12320206d076c01last_name');
INSERT INTO `aa` VALUES ('1232020412a6063last_name');
INSERT INTO `aa` VALUES ('1232020cb0ed6f2last_name');
INSERT INTO `aa` VALUES ('1232020fb10c74flast_name');
INSERT INTO `aa` VALUES ('123202076c85f39last_name');
INSERT INTO `aa` VALUES ('1232020078ecb75last_name');
INSERT INTO `aa` VALUES ('1232020946623b5last_name');
INSERT INTO `aa` VALUES ('1232020a712ca16last_name');
INSERT INTO `aa` VALUES ('12320201ed55a7elast_name');
INSERT INTO `aa` VALUES ('1232020156bd7a4last_name');
INSERT INTO `aa` VALUES ('1232020e699044dlast_name');
INSERT INTO `aa` VALUES ('123202048fbb9c0last_name');
INSERT INTO `aa` VALUES ('123202072e70ec6last_name');
INSERT INTO `aa` VALUES ('123202089279d53last_name');
INSERT INTO `aa` VALUES ('12320209b5e2fa0last_name');
INSERT INTO `aa` VALUES ('12320205eda6733last_name');
INSERT INTO `aa` VALUES ('1232020c775156elast_name');
INSERT INTO `aa` VALUES ('1232020d5a24871last_name');
INSERT INTO `aa` VALUES ('1232020ecd489a8last_name');
INSERT INTO `aa` VALUES ('123202081098ddclast_name');
INSERT INTO `aa` VALUES ('12320207bd84725last_name');
INSERT INTO `aa` VALUES ('12320204a26ac0dlast_name');
INSERT INTO `aa` VALUES ('12320204871e8cclast_name');
INSERT INTO `aa` VALUES ('12320204db9d24flast_name');
INSERT INTO `aa` VALUES ('1232020e25c0e85last_name');
INSERT INTO `aa` VALUES ('12320209f83a72dlast_name');
INSERT INTO `aa` VALUES ('1232020e3229bb7last_name');
INSERT INTO `aa` VALUES ('123202038d54c11last_name');
INSERT INTO `aa` VALUES ('12320200ea5a124last_name');
INSERT INTO `aa` VALUES ('12320209ef444fclast_name');
INSERT INTO `aa` VALUES ('12320202e83d88alast_name');
INSERT INTO `aa` VALUES ('1232020755dbd17last_name');
INSERT INTO `aa` VALUES ('1232020c0875a3clast_name');
INSERT INTO `aa` VALUES ('1232020c287766flast_name');
INSERT INTO `aa` VALUES ('1232020d99146e2last_name');
INSERT INTO `aa` VALUES ('123202074009161last_name');
INSERT INTO `aa` VALUES ('123202027892681last_name');
INSERT INTO `aa` VALUES ('123202017bb92b8last_name');
INSERT INTO `aa` VALUES ('1232020ab6a5fe7last_name');
INSERT INTO `aa` VALUES ('12320204ad2439elast_name');
INSERT INTO `aa` VALUES ('12320200efa813alast_name');
INSERT INTO `aa` VALUES ('1232020c3d598c5last_name');
INSERT INTO `aa` VALUES ('1232020e1323198last_name');
INSERT INTO `aa` VALUES ('12320202952096dlast_name');
INSERT INTO `aa` VALUES ('123202079a3f545last_name');
INSERT INTO `aa` VALUES ('1232020f48d37calast_name');
INSERT INTO `aa` VALUES ('1232020ccdd32d7last_name');
INSERT INTO `aa` VALUES ('123202091dc45f2last_name');
INSERT INTO `aa` VALUES ('1232020ef9b5210last_name');
INSERT INTO `aa` VALUES ('123202050dc7b33last_name');
INSERT INTO `aa` VALUES ('123202091c6e0a0last_name');
INSERT INTO `aa` VALUES ('1232020c8b38f74last_name');
INSERT INTO `aa` VALUES ('123202049529ae9last_name');
INSERT INTO `aa` VALUES ('123202009ecf110last_name');
INSERT INTO `aa` VALUES ('12320205bb62eealast_name');
INSERT INTO `aa` VALUES ('123202008f81807last_name');
INSERT INTO `aa` VALUES ('123202051d4533elast_name');
INSERT INTO `aa` VALUES ('1232020574db0bclast_name');
INSERT INTO `aa` VALUES ('123202051616126last_name');
INSERT INTO `aa` VALUES ('12320202864c691last_name');
INSERT INTO `aa` VALUES ('123202005b097e5last_name');
INSERT INTO `aa` VALUES ('123202052a45100last_name');
INSERT INTO `aa` VALUES ('123202092c3cbf5last_name');
INSERT INTO `aa` VALUES ('1232020f4e5107clast_name');
INSERT INTO `aa` VALUES ('123202053f2bc81last_name');
INSERT INTO `aa` VALUES ('12320206a799c4flast_name');
INSERT INTO `aa` VALUES ('12320202319466clast_name');
INSERT INTO `aa` VALUES ('1232020ce291fealast_name');
INSERT INTO `aa` VALUES ('1232020f9490924last_name');
INSERT INTO `aa` VALUES ('12320204153f802last_name');
INSERT INTO `aa` VALUES ('123202050859af9last_name');
INSERT INTO `aa` VALUES ('1232020e2dfb90alast_name');
INSERT INTO `aa` VALUES ('12320201de06c7clast_name');
INSERT INTO `aa` VALUES ('1232020e63bfe3elast_name');
INSERT INTO `aa` VALUES ('1232020939992b6last_name');
INSERT INTO `aa` VALUES ('1232020b08da3b3last_name');
INSERT INTO `aa` VALUES ('12320207e442484last_name');
INSERT INTO `aa` VALUES ('1232020541ede39last_name');
INSERT INTO `aa` VALUES ('123202068b0aac9last_name');
INSERT INTO `aa` VALUES ('123202042b33f77last_name');
INSERT INTO `aa` VALUES ('12320201e1421cflast_name');
INSERT INTO `aa` VALUES ('1232020eda58340last_name');
INSERT INTO `aa` VALUES ('12320201bce351blast_name');
INSERT INTO `aa` VALUES ('1232020317271b3last_name');
INSERT INTO `aa` VALUES ('12320202d0ace13last_name');
INSERT INTO `aa` VALUES ('1232020e9b31af7last_name');
INSERT INTO `aa` VALUES ('1232020a05360edlast_name');
INSERT INTO `aa` VALUES ('12320208f95b4c7last_name');
INSERT INTO `aa` VALUES ('1232020bf082069last_name');
INSERT INTO `aa` VALUES ('12320208f29e710last_name');
INSERT INTO `aa` VALUES ('1232020954b33eclast_name');
INSERT INTO `aa` VALUES ('1232020675f3ba9last_name');
INSERT INTO `aa` VALUES ('1232020f53497c8last_name');
INSERT INTO `aa` VALUES ('12320206e2de015last_name');
INSERT INTO `aa` VALUES ('12320205c70f874last_name');
INSERT INTO `aa` VALUES ('123202056d56465last_name');
INSERT INTO `aa` VALUES ('1232020ada3de39last_name');
INSERT INTO `aa` VALUES ('1232020699b31aclast_name');
INSERT INTO `aa` VALUES ('12320208d2b0f14last_name');
INSERT INTO `aa` VALUES ('1232020869bedc1last_name');
INSERT INTO `aa` VALUES ('1232020f29b6bdblast_name');
INSERT INTO `aa` VALUES ('12320203c3fd4a1last_name');
INSERT INTO `aa` VALUES ('12320200ff6ce83last_name');
INSERT INTO `aa` VALUES ('12320202e461a53last_name');
INSERT INTO `aa` VALUES ('1232020d05c180clast_name');
INSERT INTO `aa` VALUES ('1232020e39d4335last_name');
INSERT INTO `aa` VALUES ('1232020924f02aclast_name');
INSERT INTO `aa` VALUES ('12320200db96492last_name');
INSERT INTO `aa` VALUES ('12320201a4cd1d8last_name');
INSERT INTO `aa` VALUES ('12320208de33b5blast_name');
INSERT INTO `aa` VALUES ('12320205c950c31last_name');
INSERT INTO `aa` VALUES ('12320204f8139felast_name');
INSERT INTO `aa` VALUES ('12320208edc533alast_name');
INSERT INTO `aa` VALUES ('123202010285587last_name');
INSERT INTO `aa` VALUES ('1232020c060fd8clast_name');
INSERT INTO `aa` VALUES ('1232020fd85c699last_name');
INSERT INTO `aa` VALUES ('12320201c965a92last_name');
INSERT INTO `aa` VALUES ('123202015c758edlast_name');
INSERT INTO `aa` VALUES ('123202054804385last_name');
INSERT INTO `aa` VALUES ('12320202390407blast_name');
INSERT INTO `aa` VALUES ('123202022ca738blast_name');
INSERT INTO `aa` VALUES ('12320207bc8370dlast_name');
INSERT INTO `aa` VALUES ('123202079d2715clast_name');
INSERT INTO `aa` VALUES ('12320205cee69b7last_name');
INSERT INTO `aa` VALUES ('12320204f93d9felast_name');
INSERT INTO `aa` VALUES ('1232020ac772a1dlast_name');
INSERT INTO `aa` VALUES ('1232020399125c3last_name');
INSERT INTO `aa` VALUES ('1232020bd1e9e5blast_name');
INSERT INTO `aa` VALUES ('1232020dd88f7fflast_name');
INSERT INTO `aa` VALUES ('1232020ed55f449last_name');
INSERT INTO `aa` VALUES ('1232020f6646a1elast_name');
INSERT INTO `aa` VALUES ('1232020aa91d462last_name');
INSERT INTO `aa` VALUES ('123202053f21297last_name');
INSERT INTO `aa` VALUES ('1232020c7941100last_name');
INSERT INTO `aa` VALUES ('1232020b0f85656last_name');
INSERT INTO `aa` VALUES ('1232020987ec024last_name');
INSERT INTO `aa` VALUES ('123202020e51405last_name');
INSERT INTO `aa` VALUES ('1232020d3117597last_name');
INSERT INTO `aa` VALUES ('12320205c6a6e50last_name');
INSERT INTO `aa` VALUES ('1232020c10ab8d2last_name');
INSERT INTO `aa` VALUES ('1232020f0eb96c1last_name');
INSERT INTO `aa` VALUES ('1232020b5e4d9dflast_name');
INSERT INTO `aa` VALUES ('12320204fb59536last_name');
INSERT INTO `aa` VALUES ('1232020e8f03da7last_name');
INSERT INTO `aa` VALUES ('12320208293b627last_name');
INSERT INTO `aa` VALUES ('123202007192610last_name');
INSERT INTO `aa` VALUES ('1232020f28af352last_name');
INSERT INTO `aa` VALUES ('12320207161c112last_name');
INSERT INTO `aa` VALUES ('12320206b0c2801last_name');
INSERT INTO `aa` VALUES ('123202064868c18last_name');
INSERT INTO `aa` VALUES ('1232020e25b729elast_name');
INSERT INTO `aa` VALUES ('12320205e99542clast_name');
INSERT INTO `aa` VALUES ('12320205e363146last_name');
INSERT INTO `aa` VALUES ('1232020cd6c157elast_name');
INSERT INTO `aa` VALUES ('1232020e55e81d3last_name');
INSERT INTO `aa` VALUES ('12320202937c2d3last_name');
INSERT INTO `aa` VALUES ('12320202f3aa763last_name');
INSERT INTO `aa` VALUES ('12320209050ad72last_name');
INSERT INTO `aa` VALUES ('123202082418944last_name');
INSERT INTO `aa` VALUES ('1232020919ed916last_name');
INSERT INTO `aa` VALUES ('1232020f0c44c06last_name');
INSERT INTO `aa` VALUES ('1232020cb99d3d9last_name');
INSERT INTO `aa` VALUES ('12320201db9a695last_name');
INSERT INTO `aa` VALUES ('123202096f5552dlast_name');
INSERT INTO `aa` VALUES ('12320203dc103a8last_name');
INSERT INTO `aa` VALUES ('1232020e01a9556last_name');
INSERT INTO `aa` VALUES ('12320206b0bfa4elast_name');
INSERT INTO `aa` VALUES ('12320204d2cd307last_name');
INSERT INTO `aa` VALUES ('1232020eb8969bblast_name');
INSERT INTO `aa` VALUES ('12320209f78dd2elast_name');
INSERT INTO `aa` VALUES ('12320200bd157fblast_name');
INSERT INTO `aa` VALUES ('1232020ee537595last_name');
INSERT INTO `aa` VALUES ('12320203f4acc7blast_name');
INSERT INTO `aa` VALUES ('1232020fda16f6elast_name');
INSERT INTO `aa` VALUES ('12320207a41b76blast_name');
INSERT INTO `aa` VALUES ('1232020d33a60d4last_name');
INSERT INTO `aa` VALUES ('12320209646c099last_name');
INSERT INTO `aa` VALUES ('123202079941429last_name');
INSERT INTO `aa` VALUES ('1232020dda171b4last_name');
INSERT INTO `aa` VALUES ('123202030b9672elast_name');
INSERT INTO `aa` VALUES ('1232020022a68felast_name');
INSERT INTO `aa` VALUES ('1232020647479felast_name');
INSERT INTO `aa` VALUES ('123202030b6ecc7last_name');
INSERT INTO `aa` VALUES ('12320209ee9acdclast_name');
INSERT INTO `aa` VALUES ('12320208d490289last_name');
INSERT INTO `aa` VALUES ('1232020db50ce27last_name');
INSERT INTO `aa` VALUES ('1232020db1b8d1elast_name');
INSERT INTO `aa` VALUES ('1232020c466c02dlast_name');
INSERT INTO `aa` VALUES ('12320208a052b3blast_name');
INSERT INTO `aa` VALUES ('123202002918365last_name');
INSERT INTO `aa` VALUES ('1232020ad9a8e71last_name');
INSERT INTO `aa` VALUES ('12320204c76f339last_name');
INSERT INTO `aa` VALUES ('12320204e2d4265last_name');
INSERT INTO `aa` VALUES ('12320206fb924bflast_name');
INSERT INTO `aa` VALUES ('1232020025dadb6last_name');
INSERT INTO `aa` VALUES ('1232020fea72204last_name');
INSERT INTO `aa` VALUES ('1232020cd2f27cblast_name');3. 找合适的索引长度
select
count(DISTINCT left(name,1))/count(*) as left1 ,
count(DISTINCT left(name,2))/count(*) as left2 ,
count(DISTINCT left(name,3))/count(*) as left3 ,
count(DISTINCT left(name,4))/count(*) as left4 ,
count(DISTINCT left(name,5))/count(*) as left5 ,
count(DISTINCT left(name,6))/count(*) as left6 ,
count(DISTINCT left(name,7))/count(*) as left7 ,
count(DISTINCT left(name,8))/count(*) as left8 ,
count(DISTINCT left(name,9))/count(*) as left9 ,
count(DISTINCT left(name,10))/count(*) as left10,
count(DISTINCT left(name,11))/count(*) as left11,
count(DISTINCT left(name,12))/count(*) as left12,
count(DISTINCT left(name,13))/count(*) as left13from aa查看结果 left12 已经是1了 (最完美的值 而且也不算很长)
left13 还是1 所以就用12 个长度作为索引就行了ALTER TABLE `aa`
ADD INDEX `index_aa` (`name`(12)) ;

索引扫描排序

  1. 说明
            mysql 有2种方式可以生成有序结果:通过排序操作或者按照索引顺序进行扫描,如果explain 出来的type列为index,则说明mysql使用了索引扫描来排序
            扫描索引本身是很快的,因为只需要从一条记录移动到紧接着的下一条记录,但是如果索引不能覆盖查询所需的全部列,那么就不得不每扫描一条索引记录就需要回表查询一次所需的行,这基本都是随机IO,因此按索引顺序读取数据的速度通常要比顺序全表扫描慢
            mysql可以使用一个索引既满足排序,又用于查找行,如果可能的话,设计索引时应该尽可能的同时满足这两种任务
            只有当索引的列顺序和order by 子句顺序完全一致,并且所有的列排序方式都是一样时,mysql才能使用索引来对结果进行排序,如果查询需要关联多张表,则只有当order by 子句引用的字段全部为第一张表时,才能使用索引排序,order by 子句和查找类型的限制是一样的,需要满足索引的最左前缀匹配,否则mysql都需要执行顺序操作,而无法利用索引排序

  2. 示例

1.创建表
还是用上边的表:dd
2.测试2.1 explain select d1, d4 from dd where d1='1' order by  d2,d3-- Using index condition; Using where-- order by 子句不满足索引的最左前缀也可以用于查找排序,因为第一列被指定成为了一个常数2.2 explain select  d4 from dd where d1='1' order by  d2 -- Using index condition; Using where-- 一个常数 + 索引字段 凑成最左前缀 2.3 explain select  d4 from dd where d1='1' order by  d3-- Using index condition; Using where; Using filesort -- 使用了全表扫描2.4 explain select  d4 from dd where d1 > '1' order by  d2,d3--Using where; Using filesort -- 全表扫描  第一个值是范围查找 最左前缀匹配不到后边的列2.5 explain select  d4 from dd where d1 = '1' order by  d2 desc,d3 asc-- Using index condition; Using where; Using filesort -- 一个降序 一个升序  是不行的  必须全是asc 或者全是desc2.6 explain select  d4 from dd where d1 = '1' order by  d2 desc,d3 desc-- Using where2.7 explain select  d4 from dd where d1 = '1' order by  d2 asc,d3 asc-- Using index condition; Using where2.8 explain select  d4 from dd where d1 = '1' order by  d2 ,d4--Using index condition; Using where; Using filesort-- d4 不是索引列 所以不会使用索引排序2.9 explain select d4 from dd where d1 > '1' order by   d1-- Using where; Using filesort-- 未使用索引排序 2.10 explain select d1 from dd where d1 > '1' order by   d1-- 使用了索引排序
``0`#### 番外```bash
show index from table_name
-- 有一列是 Cardinality
-- 叫做基数 某个列里边去重之后的值个数  hyperloglog算法能统计
-- OLAP 会用到 

mysql优化 个人笔记 (mysql 进阶索引 ) 非礼勿扰 -m12相关推荐

  1. mysql优化 个人笔记 (mysql 进阶索引 ) 非礼勿扰 -m14

    查询优化 1. 查询慢的可能原因 网络 CPU (时间片) IO (磁盘) 上下文切换 (线程切换) 系统调用 生成统计信息 锁等待时间 2. 优化数据访问 查询性能低的主要原因是访问的数据太多,某些 ...

  2. mysql优化 个人笔记 (mysql 进阶索引 ) 非礼勿扰 -m15

    一. limit 1. 测试案例 -- 创建表 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cover1/248667912046641316.jpg?x-oss ...

  3. mysql优化 个人笔记 (mysql 进阶索引 ) 非礼勿扰 -m13

    接上一篇 一.union all .in .or -- 还是老朋友 dd DROP TABLE IF EXISTS `dd`; CREATE TABLE `dd` (`d1` varchar(255) ...

  4. mysql优化 个人笔记 (mysql锁机制 ) 非礼勿扰 -m10

    锁机制 A : undolog 实现 C : I :锁实现 D :redolog实现 1. mysql锁基本介绍 锁是计算机协调多个进程或线程并发访问某一资源的机制 在数据库中 除了传统的计算机资源( ...

  5. mysql优化 个人笔记 (mysql 主从复制 ) 非礼勿扰 -m11

    1.为什么需要主从复制 在业务中 有一条sql需要锁表 就会导致其他读业务不能执行 ,那么就很影响业务,使用主从复制,让主库写,从库读.这样即使主库出现锁表情况,从库也可以正常使用,保证业务正常进行 ...

  6. mysql优化说出九条_技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢?

    原标题:技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢? 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 ...

  7. mysql数据库优化课程---15、mysql优化步骤(mysql中最常用最立竿见影的优化是什么)...

    mysql数据库优化课程---15.mysql优化步骤(mysql中最常用最立竿见影的优化是什么) 一.总结 一句话总结:索引优化最立竿见影 索引优化:不然有多少行要扫描多少次,1亿行大概是5到10分 ...

  8. MySQL优化(二):索引的类型、匹配原则、创建原则

    目录 索引的优缺点 索引类型 聚簇索引(主键索引) 非聚簇索引(二级索引.辅助索引) 索引匹配的原则 最左匹配原则 无法使用索引的场景 索引创建的原则 使不使用索引的依据到底是什么? 参考 索引的优缺 ...

  9. Mysql 优化(学习笔记二十)

    https://blog.csdn.net/steven_liwen/article/details/53188411 运维角度mysql优化:https://www.cnblogs.com/shen ...

最新文章

  1. 重磅! SLAM从入门到精通系统教程汇总
  2. iPhone开发:09年开发领域的最热看点!
  3. Android开发中的Handler和多线程
  4. kafka 重复消费和数据丢失_刨根问底,Kafka消息中间件到底会不会丢消息
  5. ArcGIS 复制要素
  6. hdu 5285 二分图黑白染色
  7. Dist类系列(一):根据字典的key值、value值进行排序
  8. 音视频技术开发周刊 | 227
  9. 牛客网_PAT乙级_1010月饼 (25)
  10. 关于单位基金资产净值
  11. 可变参数列表(va_list,va_arg,va_copy,va_start,va_end)
  12. cookie、session、sessionid 与jsessionid之间的关系
  13. 同样是机器学习算法工程师,你的面试为什么过不了?
  14. 交叉表 mysql_MySql交叉表
  15. VUE 完整项目构建 (1) -- 初始化
  16. load west0479 matlab,matlab矩阵详解 - Matlab 资料库 视频 教程 讲义 代码 - 数学建模社区-数学中国...
  17. 切比雪夫多项式c语言csdn,切比雪夫多项式(Chebyshev polynomials)
  18. MVX相关设计模式的理解。
  19. 人类的终极目标是什么?
  20. Hadoop高可用安装

热门文章

  1. STM32F103ZET6新建标准库的工程
  2. @Transactional类内部访问失效原因详解
  3. windows还原系统_如何在Windows 7、8和10中使用系统还原
  4. java获取组合框值_在Java swing中获得组合框值
  5. 百度阿波罗计划要做“安卓”,自动驾驶创业迎来大洗牌?
  6. web前端:4_盒子模型与样式排版(手机壁纸切换)
  7. Oracle 批量添加 错误 SQL语句未结束
  8. ntoskrnl.exe 占用 80 端口 怎样关闭 system 占用80端口的pid为4的进程
  9. 操作系统中系统时钟,硬件时钟(后备时钟,实时时钟),网络时钟 辨析
  10. 安全证书相关知识补充