Mysql多列索引實踐

在網上看到:web

定義:最左前綴原則指的的是在sql where 子句中一些條件或表達式中出現的列的順序要保持和多索引的一致或以多列索引順序出現,只要 出現非順序出現、斷層都沒法利用到多列索引。sql

該博文有誤 ,暫未修改 2013年11月22日ide

 

打算實踐一下,可是實踐結果卻正好相反,最後找出緣由。spa

 

第一次實踐過程以下: 3d

/*
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

執行結果:竟然走索引了,和網上結論不一致。code

 

-----------------------------------------------------------------------------哥哥哥-----------------------------------------orm

 

第二次實踐:正確,就是由於多了一個列(nimeiya),而在實際中,不太可能出現沒有多餘的列狀況。blog

/*
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

相關文章
相關標籤/搜索