在网上看到:

定义:最左前缀原则指的的是在sql where 子句中一些条件或表达式中出现的列的顺序要保持和多索引的一致或以多列索引顺序出现,只要 出现非顺序出现、断层都无法利用到多列索引。

该博文有误 ,暂未修改 2013年11月22日

打算实践一下,但是实践结果却正好相反,最后找出原因。

第一次实践过程如下: 

  1. /*
  2. Navicat MySQL Data Transfer
  3.  
  4. Source Server : localhost
  5. Source Server Version : 50515
  6. Source Host : localhost:3306
  7. Source Database : wangchy
  8.  
  9. Target Server Type : MYSQL
  10. Target Server Version : 50515
  11. File Encoding : 65001
  12.  
  13. Date: 2013-08-23 10:51:14
  14. */
  15.  
  16. SET FOREIGN_KEY_CHECKS=0;
  17.  
  18. -- ----------------------------
  19. -- Table structure for test_bak
  20. -- ----------------------------
  21. DROP TABLE IF EXISTS `test_bak`;
  22. CREATE TABLE `test_bak` (
  23. `name` char(255) NOT NULL,
  24. `id` int(11) NOT NULL AUTO_INCREMENT,
  25. `age` char(11) DEFAULT NULL,
  26. `score` char(11) DEFAULT NULL,
  27. PRIMARY KEY (`id`),
  28. KEY `name` (`name`,`age`,`score`) USING BTREE
  29. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
  30.  
  31. -- ----------------------------
  32. -- Records of test_bak
  33. -- ----------------------------
  34. INSERT INTO `test_bak` VALUES ('lisan', '', '', '');
  35. INSERT INTO `test_bak` VALUES ('test', '', '', '');
  36. INSERT INTO `test_bak` VALUES ('wangchy', '', '', '');

执行结果:居然走索引了,和网上结论不一致。

-----------------------------------------------------------------------------哥哥哥-----------------------------------------

第二次实践:正确,就是因为多了一个列(nimeiya),而在实际中,不太可能出现没有多余的列情况。

  1. /*
  2. Navicat MySQL Data Transfer
  3.  
  4. Source Server : localhost
  5. Source Server Version : 50515
  6. Source Host : localhost:3306
  7. Source Database : wangchy
  8.  
  9. Target Server Type : MYSQL
  10. Target Server Version : 50515
  11. File Encoding : 65001
  12.  
  13. Date: 2013-08-23 10:51:09
  14. */
  15.  
  16. SET FOREIGN_KEY_CHECKS=0;
  17.  
  18. -- ----------------------------
  19. -- Table structure for test
  20. -- ----------------------------
  21. DROP TABLE IF EXISTS `test`;
  22. CREATE TABLE `test` (
  23. `id` int(11) NOT NULL AUTO_INCREMENT,
  24. `name` char(255) NOT NULL,
  25. `age` char(11) DEFAULT NULL,
  26. `score` char(11) DEFAULT NULL,
  27. `nimeiya` varchar(20) DEFAULT '',
  28. PRIMARY KEY (`id`),
  29. KEY `name` (`name`,`age`,`score`) USING BTREE
  30. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
  31.  
  32. -- ----------------------------
  33. -- Records of test
  34. -- ----------------------------
  35. INSERT INTO `test` VALUES ('', 'wangchy', '', '', '');
  36. INSERT INTO `test` VALUES ('', 'test', '', '', '');
  37. INSERT INTO `test` VALUES ('', 'lisan', '', '', '');

Mysql多列索引实践的更多相关文章

  1. mysql多列索引和最左前缀

    数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度.索引优化是数据库优化的最重要手段. 如果查询语句使用 ...

  2. Mysql的列索引和多列索引(联合索引)

    转自:http://blog.chinaunix.net/uid-29305839-id-4257512.html 创建一个多列索引:CREATE TABLE test (      id       ...

  3. 正确理解Mysql的列索引和多列索引

    MySQL数据库提供两种类型的索引,如果没正确设置,索引的利用效率会大打折扣却完全不知问题出在这. CREATE TABLE test ( id         INT NOT NULL, last_ ...

  4. mysql 多列索引的生效规则

    mysql中 myisam,innodb默认使用的是 Btree索引,至于btree的数据结构是怎样的都不重要,只需要知道结果,既然是索引那这个数据结构最后是排好序:就像新华字典他的目录就是按照a,b ...

  5. mysql多列索引优化

    “把Where条件里面的列都建上索引”,这种说法其实是非常错误的! 这样一个查询,假设actor_id与film_id都单独建立索引 SELECT film_id , actor_id FROM sa ...

  6. MySQL 多列索引优化小记

    MySQL 5.6.30 问题背景 由于爬虫抓取的数据不断增多,这两天在不断对数据库以及查询语句进行优化,其中一个表结构如下: CREATE TABLE `newspaper_article` ( ` ...

  7. Mysql多列索引经典案例

    一个经典的多列索引案例,如题: 假设某个表有一个联合索引(c1,c2,c3,c4)一下--只能使用该联合索引的 c1,c2,c3 部分 Awhere c1=x and c2=x and c4>x ...

  8. mysql 多列索引学习-经典实例

    索引优化 ,b-tree假设某个表有一个联合索引(c1,c2,c3,c4) 以下 只能使用该联合索引的c1,c2,c3部分A. where c1 = x and c2 = x and c4>x ...

  9. mysql多列索引

    1,数据库每次查询只能使用一个索引 2,假设数据 表T (a,b,c) rowid 为物理位置rowid a b c(1) 1 1 1(2) 2 1 13(3) 2 2 14(4) 1 3 3(5)  ...

随机推荐

  1. python之*的魔性用法

    1. *在函数中的作用 聚合 在函数定义时聚合 def eat(args): print('我请你吃:',args) eat('蒸羊羔儿') # 输出结果 # 我请你吃: 蒸羊羔儿 打散 在函数执行时 ...

  2. python中yield的用法详解

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂 ...

  3. 学习JavaScript你必须掌握的8大知识点!

    大知识点! 一.JavaScript思维导图之<变量>的学习 二.    JavaScript思维导图之<函数基础>  三.JavaScript思维导图之<基本dom操作 ...

  4. Xcode 的expression命令

    expression命令是执行一个表达式,并将表达式返回的结果输出,是LLDB调试命令中最重要的命令,也是我们常用的 p 和 po 命令的 鼻祖. 他主要有2个功能 (1) 执行表达式 举例:改变视图 ...

  5. 【模板】树套树(线段树套Splay)

    如题,这是一个模板... #include <algorithm> #include <iostream> #include <cstring> #include ...

  6. vue 配置多页面应用

    前言: 本文基于vue 2.5.2, webpack 3.6.0(配置多页面原理类似,实现方法各有千秋,可根据需要进行定制化) vue 是单页面应用.但是在做大型项目时,单页面往往无法满足我们的需求, ...

  7. 无需上传附件到服务器,Servlet读取Excel(二)

    package com.str; import java.io.File;import java.io.FileInputStream;import java.io.IOException; impo ...

  8. Python模块(二)(序列化)

    1. namedtuple 命名元组->类似创建了一个类 from collections import namedtuple p = namedtuple("Point", ...

  9. 中移物联网onenet入门学习笔记1:资料获取

    onenet学习资料.视频.例程汇总:https://open.iot.10086.cn/bbs/thread-977-1-1.html onenet开发文档:https://open.iot.100 ...

  10. Linux中同步与异步、阻塞与非阻塞概念以及五种IO模型

    1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...