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) ...
随机推荐
- 《队长说得队》第九次团队作业:Beta冲刺与验收准备
项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十三 团队作业9:Beta冲刺与团队项目验收 团队名 ...
- linux - mysql 安装教程
环境介绍>>>>>>>>>>>>>>>>>> 操作系统:Centos 7 mysql数据库版 ...
- 01_13_Struts_默认Action
01_13_Struts_默认Action 1. 配置struts默认Action <package name="default" namespace="/&quo ...
- JS数据结构与算法--单向链表
链表结构:链表中每个元素由一个存储元素本身的节点和一个指向下一元素的引用组成.如下所示(手画的,比较丑,懒得用工具画了,嘻嘻) 1.append方法,向链表末尾插入一个节点 2.insert(posi ...
- Linux常用文档操作命令--2
4.文档压缩与解压操作 在Linux中常见的压缩文件有:*.tar.gz.*.tgz.*.gz.*.Z.*bz2等.其每种不同的压缩文件对印的压缩和解压命令也不同. *.tar.gz :tar程序打包 ...
- linux关于软件安装和测试
软件都是盘上的安装之前确保已挂载完毕 1.安装软件 rpm -ivh httpd-2* 2.修改配置文件 vi /etc/httpd/conf/httpd.conf listen 8888 3 ...
- Qt:实现子线程发送信号父线程切换图片
mainwindow.h中代码 #ifndef MAINWINDOW_H#define MAINWINDOW_H #include <QMainWindow>#include " ...
- python入门:用户登录,三次错误机会
#!/usr/bin/env python # -*- coding:utf-8 -*- #用户登录,三次机会重试 #主要分为两个部分,一部分是写三次循环,一部分写用户输入 #用户登录的实现,循环3次 ...
- python入门:print打印输出的用法
#!/usr/bin/python # -*- coding:utf-8 -*- # print打印输出的用法 print("holle,world!") print(1) pri ...
- PyCharm2019 激活方式
1.修改hosts激活:需要修改hosts,稳定无影响,持续更新,推荐~ 一.修改hosts激活 1.修改hosts文件 将0.0.0.0 account.jetbrains.com和0.0.0.0 ...