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', '', '', '');
INSERT INTO `test_bak` VALUES ('test', '', '', '');
INSERT INTO `test_bak` VALUES ('wangchy', '', '', '');
执行结果:居然走索引了,和网上结论不一致。
-----------------------------------------------------------------------------哥哥哥-----------------------------------------
第二次实践:正确,就是因为多了一个列(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 '',
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 ('', 'wangchy', '', '', '');
INSERT INTO `test` VALUES ('', 'test', '', '', '');
INSERT INTO `test` VALUES ('', 'lisan', '', '', '');
Mysql多列索引实践的更多相关文章
- mysql多列索引和最左前缀
数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度.索引优化是数据库优化的最重要手段. 如果查询语句使用 ...
- Mysql的列索引和多列索引(联合索引)
转自:http://blog.chinaunix.net/uid-29305839-id-4257512.html 创建一个多列索引:CREATE TABLE test ( id ...
- 正确理解Mysql的列索引和多列索引
MySQL数据库提供两种类型的索引,如果没正确设置,索引的利用效率会大打折扣却完全不知问题出在这. CREATE TABLE test ( id INT NOT NULL, last_ ...
- mysql 多列索引的生效规则
mysql中 myisam,innodb默认使用的是 Btree索引,至于btree的数据结构是怎样的都不重要,只需要知道结果,既然是索引那这个数据结构最后是排好序:就像新华字典他的目录就是按照a,b ...
- mysql多列索引优化
“把Where条件里面的列都建上索引”,这种说法其实是非常错误的! 这样一个查询,假设actor_id与film_id都单独建立索引 SELECT film_id , actor_id FROM sa ...
- MySQL 多列索引优化小记
MySQL 5.6.30 问题背景 由于爬虫抓取的数据不断增多,这两天在不断对数据库以及查询语句进行优化,其中一个表结构如下: CREATE TABLE `newspaper_article` ( ` ...
- Mysql多列索引经典案例
一个经典的多列索引案例,如题: 假设某个表有一个联合索引(c1,c2,c3,c4)一下--只能使用该联合索引的 c1,c2,c3 部分 Awhere c1=x and c2=x and c4>x ...
- mysql 多列索引学习-经典实例
索引优化 ,b-tree假设某个表有一个联合索引(c1,c2,c3,c4) 以下 只能使用该联合索引的c1,c2,c3部分A. where c1 = x and c2 = x and c4>x ...
- 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) ...
随机推荐
- bootstrap 翻页的状态
翻页的状态 下面的实例演示了上表中所讨论的 class .disabled 的用法: <!DOCTYPE html><html><head><meta htt ...
- 课下作业04-2String的使用方法
1.动手动脑之String.equals()方法public class StringEquals { public static void main(String[] args) { String ...
- cocos2dx for lua 简单的翻牌动画
local x = 20 local y = display.height/2 for i = 1,16 do--创建16张 local cardFg = display.newSprite(&quo ...
- C语言预处理_05
凡是以 “#”开头的均为预处理命令! 其定义的一般形式为: #define 标示符 字符串 对于宏定义说明以下几点: 1.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种 ...
- abaqus中的约束
1.tie -绑定约束:作用是将模型的两部分区域绑定在一起,二者之间不发生相对运动,相当于焊在一起. 2.rigid body--刚体约束--使一个模型区域刚体化,这个区域可以是一系列节点,单元等,刚 ...
- 【费用流】loj#545. 「LibreOJ β Round #7」小埋与游乐场
好像现在看来这个缩点的思路挺清晰啊 题目描述 有两个非负整数组成的可重集合 $A$ 和 $B$. 现在你可以对 $A$ 中至多 $k$ 个元素进行操作.操作方法为:设你准备操作且未被操作过的 $A$ ...
- Pandas中数据的处理
有两种丢失数据 ——None ——np.nan(NaN) None是python自带的,其类型为python object.因此,None不能参与到任何计算中 Object类型的运算比int类型的运算 ...
- R-barplot()
barplot这个函数啊...坑...度娘的很多解决方案都不对,只好重新看回manual再做测试== 本文参考的是: https://stat.ethz.ch/R-manual/R-devel/lib ...
- solr7.7.1完整教程
安装 上传solr-7.7.1.tgz至服务器 opt文件加下 解压 tar -zxvf solr-7.7.1.tgz 运行 进入到加压后的文件夹/opt/solr-7.7.1,执行一下命令启动sol ...
- centos7 killall 命令
centos7精简安装后,使用中发现没有killall命令. 安装这个包即可: yum install psmisc