• 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

     

  • 相关阅读:
    Html5新标签解释及用法
    时间线效果
    NHibernate数据访问层核心代码
    C#开源资源项目
    安卓开发环境搭建之最新版(So Easy!)
    WIN8相关资源汇总
    HTML5 Shiv – 让该死的IE系列支持HTML5吧
    WCF 提高传输数据性能方法之二 (数据分割)
    支付宝集成问题(.net篇)
    WCF 提高传输数据性能方法之一 (使用压缩)
  • 原文地址:https://www.cnblogs.com/wangchy0927/p/3277079.html
Copyright © 2020-2023  润新知