MySQL索引的设计和使用
一、索引可以有效地提升SELECT操作的性能,同时会影响UPDATE、CREATE和DELETE操作的性能。每种引擎对于表的索引有数量和长度的限制。
二、索引的设计原则
(A) 搜索的索引列,不一定是要选择的列,最适合索引的列是where子句的列或连接子句中的列。
(B) 使用唯一索引,索引列的基础越大,索引的效果越好。
(C) 使用短索引,如果对字符串列(char,varchar,text)索引,应该指定前缀长度,使用前缀索引。
(D) 利用最左前缀,创建一个n列的索引时,实际是创建了MySQL可利用的n个索引。可利用索引中的最左边的列集来匹配行,这样的列集被称为最左前缀。
(E) 不要过度索引,
(F) 对于InnoDB存储引擎的表,记录默认先后会以 主键、唯一索引、内部列 依次存放,选择好的主键很重要。同时,普通索引会保存主键的键值,主键要尽可能选择短的数据类型。
三、BTREE索引和HASH索引
(A) HASH索引的特点:
只用于=和<=>操作符的等式比较。
优化器不能使用HASH索引来加速ORDER BY 操作。
MySQL不能确定两个值之间大约有多少行。
只能使用整个关键词来搜索一行。
(B) BTREE索引的特点
使用 >、<、>=、<=、BETWEEN、!=或者<>,或者LIKE 'pattern‘(不以通配符开始)操作符时,都可以使用索引。
四、小结
大多数MySQL索引使用BTREE中存储,空间列类型的索引使用RTREE。
MySQL索引的设计和使用的更多相关文章
- MySQL索引的设计、使用和优化
原文:http://bbs.landingbj.com/t-0-243071-1.html MySQL索引概述 所有MySQL列类型可以被索引.对相关列使用索引是提高SELECT操作性能的最佳途径.根 ...
- 深入浅出分析MySQL索引设计背后的数据结构
在我们公司的DB规范中,明确规定: 1.建表语句必须明确指定主键 2.无特殊情况,主键必须单调递增 对于这项规定,很多研发小伙伴不理解.本文就来深入简出地分析MySQL索引设计背后的数据结构和算法,从 ...
- mysql 开发基础系列15 索引的设计和使用
一.概述 所有mysql 列类型都可以被索引,是提高select查询性能的最佳方法. 根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种引擎对每个表至少支持16个索引,总索引长度至少为256字 ...
- MySQL索引设计不可忽视的知识点
本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开. 一.MySQL——索引基础 首先,我们将从索引基础开始介绍一下什么 ...
- MySQL 索引设计概要
在关系型数据库中设计索引其实并不是复杂的事情,很多开发者都觉得设计索引能够提升数据库的性能,相关的知识一定非常复杂. 然而这种想法是不正确的,索引其实并不是一个多么高深莫测的东西,只要我们掌握一定的方 ...
- mysql索引设计
mysql索引设计 1.B树与B+树的区别?B-Tree:一个节点可以拥有大于2个子节点的平衡多叉树,所有关键字在整颗树中出现,包括在非叶子节点也能命中, 叶子节点之间没有链表B+Tree:每个叶子节 ...
- mysql索引设计的注意事项
mysql索引设计的注意事项 目录 一.索引的重要性 二.执行计划上的重要关注点 (1).全表扫描,检索行数 (2).key,using index(覆盖索引) (3).通过key_len确定究竟使用 ...
- MySql(二)索引的设计与使用
MySql(二)索引的设计与使用 一.索引概述 二.设计索引的原则 三.BTREE索引与HASH索引 一.索引概述 所有Mysql列类型都可以被索引,对相关列使用索引时提高select操作性能的最佳途 ...
- MySql数据表设计,索引优化,SQL优化,其他数据库
MySql数据表设计,索引优化,SQL优化,其他数据库 1.数据表设计 1.1数据类型 1.2避免空值 1.3text类型优化 2.索引优化 2.1索引分类 2.2索引优化 3.SQL优化 3.1分批 ...
随机推荐
- Winform菜单和工具栏控件
1.ContextMenuStrip--右键菜单 可以绑定在任何一个控件上,添加操作快捷键,并可以设置多层 每行相当于一个按钮,输入-可添加分割线 2.MenuStrip--菜单 优先级最高,一定会出 ...
- jmeter(七)定时器
知识来源有点复杂,其他测试工作者的博客,百度百科,搜集的电子文档,个人理解等等,限于水平和理解能力,可能有些内容有错误的地方... jmeter提供了很多元件,帮助我们更好的完成各种场景的性能测试,其 ...
- FineUI小技巧(5)向子窗口传值,向父窗口传值
前言 FineUI中经常会用到启用IFrame的Window控件,这样有助于从物理上进行代码解耦和.IFrame的引入就会涉及传值问题,如何在父窗口和子窗口之间相互传值呢? 向子窗口传值 向子窗口传值 ...
- docfx组件介绍--YamlSerialization
在docfx中把元数据以yaml的形式保存,在metadata阶段会序列化数据到yaml文件中,在build阶段又需要从yaml文件反序列化出来.在使用过程中,意外发现yamldotnet在处理大量强 ...
- C++ 一个例子彻底搞清楚拷贝构造函数和赋值运算符重载的区别
class TestChild { public: TestChild() { x=; y=; printf("TestChild: Constructor be called!\n&quo ...
- 网易蜂巢微服务架构:用RabbitMQ实现轻量级通信
本次分享内容由三个部分组成: 微服务架构与MQ RabbitMQ场景分析与优化 RabbitMQ在网易蜂巢中的应用和案例分享 1微服务架构与MQ 微服务架构是一种架构模式,它将单体应用划分成一组微小的 ...
- [转]Struts2理解--动态方法和method属性及通配符_默认Action
众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Ac ...
- iOS小知识点(非UI部分)
1. _cmd 表示当前方法的@SEL指针, - (void)putString{} 对于这个函数_cmd 等效于@selector(putString)
- ORB-SLAM(一)简介
ORB-SLAM是一种基于ORB特征的三维定位与地图构建算法(SLAM)[1].该算法由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos于2015年发表在I ...
- phpexcel导入数据部分数据有误
数据在excel中是这样的: 插入数据库后是这样的: 很难发现,出错的那几条数据中的单元格中都有英文','符号,而phpexcel又是以','来拼接读取到的数据的. 解决办法:修改代码中的','为不常 ...