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) ...
随机推荐
- java基础—配置环境变量
前言 学习java的第一步就要搭建java的学习环境,首先是要安装JDK,JDK安装好之后,还需要在电脑上配置"JAVA_HOME”."path”."classpath& ...
- Bootstrap 提示工具(Tooltip)插件方法的用法
方法 下面是一些提示工具(Tooltip)插件中有用的方法: 方法 描述 实例 Options: .tooltip(options) 向元素集合附加提示工具句柄. $().tooltip(option ...
- loj6485 LJJ 学二项式定理
题目描述: loj 题解: 单位根反演. $[n|x]=\frac{1}{n} \sum _{i=0}^{n-1} (ω_n^x)^i$ 证明?显然啊,要么停在$(1,0)$要么转一圈. 所以说题目要 ...
- 初学者之 Git 和 Github
git和github是两个完全不同的概念. git 是一个版本管理工具,是可以在你电脑不联网的情况下,只在本地使用的一个版本管理工具,其作用就是可以让你更好的管理你的程序,比如你原来提交过的内容, ...
- ubuntu16.04安装mongodb,创建数据库管理员,上传文件到服务器上
1.导入软件源得公钥 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 2.为mongodb创建软件 ...
- python--字符编码理解
一.字符编码简史: 美国:1963年 ASCII (包含127个字符 占1个字节) 中国:1980年 GB2312 (收录7445个汉字,包括6763个汉字和682个其它符号) 1993年 GB13 ...
- CentOS 6 搭建SVN支持httpd和svnserve独立服务器两种模式 以及邮件配置
Linux下SVN服务器同时支持Apache的http和svnserve独立服务器两种模式且使用相同的访问权限账号 服务器操作系统:CentOS 6.x 1.在服务器上安装配置SVN服务: 2.配置S ...
- 创建 Django 步骤
1.创建项目 django-admin startproject 项目名称 2.创建APP python manage.py startapp app名称 3.修改settings.py文件 3.1设 ...
- zigbee 中 OSAL 事件传递机制和消息传递机制
一.概述 OSAL (Operating System Abstraction Layer) ,翻译为"操作系统抽象层". OSAL 就是一种支持多任务运行的系统资源分配机制.OS ...
- Nordic Collegiate Programming Contest 2015 D. Disastrous Downtime
You're investigating what happened when one of your computer systems recently broke down. So far you ...