在網上看到: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');
執行結果:竟然走索引了,和網上結論不一致。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');