zoukankan      html  css  js  c++  java
  • Mysql多列索引实践

    在网上看到:

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

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

     

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

     

    第一次实践过程如下: 

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : localhost
    Source Server Version : 50515
    Source Host           : localhost:3306
    Source Database       : wangchy
    
    Target Server Type    : MYSQL
    Target Server Version : 50515
    File Encoding         : 65001
    
    Date: 2013-08-23 10:51:14
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for test_bak
    -- ----------------------------
    DROP TABLE IF EXISTS `test_bak`;
    CREATE TABLE `test_bak` (
      `name` char(255) NOT NULL,
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `age` char(11) DEFAULT NULL,
      `score` char(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `name` (`name`,`age`,`score`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of test_bak
    -- ----------------------------
    INSERT INTO `test_bak` VALUES ('lisan', '3', '33', '44');
    INSERT INTO `test_bak` VALUES ('test', '2', '22', '33');
    INSERT INTO `test_bak` VALUES ('wangchy', '1', '11', '23');
    View Code

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

     

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

     

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

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : localhost
    Source Server Version : 50515
    Source Host           : localhost:3306
    Source Database       : wangchy
    
    Target Server Type    : MYSQL
    Target Server Version : 50515
    File Encoding         : 65001
    
    Date: 2013-08-23 10:51:09
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for test
    -- ----------------------------
    DROP TABLE IF EXISTS `test`;
    CREATE TABLE `test` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` char(255) NOT NULL,
      `age` char(11) DEFAULT NULL,
      `score` char(11) DEFAULT NULL,
      `nimeiya` varchar(20) DEFAULT '0',
      PRIMARY KEY (`id`),
      KEY `name` (`name`,`age`,`score`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of test
    -- ----------------------------
    INSERT INTO `test` VALUES ('1', 'wangchy', '11', '23', '0');
    INSERT INTO `test` VALUES ('2', 'test', '22', '33', '0');
    INSERT INTO `test` VALUES ('3', 'lisan', '33', '44', '0');
    View Code

     

  • 相关阅读:
    团队作业第二次—项目选题报告(葫芦娃)
    软工实践|结对第二次—文献摘要热词统计及进阶需求
    软工实践|结对第一次—原型设计(文献摘要热词统计)
    软件工程|第一次作业-准备篇
    个人作业--软件工程实践总结作业
    团队作业第二次—项目选题报告(葫芦娃队)
    结对第二次--文献摘要热词统计及进阶需求
    结对第一次—原型设计(文献摘要热词统计)
    第一次作业-准备篇
    个人作业——软件工程实践总结作业
  • 原文地址:https://www.cnblogs.com/wangchy0927/p/3277079.html
Copyright © 2011-2022 走看看