浅谈索引

引言

作为一名web程序员,和数据库打交道是必不可少的,为了优化查询的效率,我们最常想到的方法应该就是添加索引了,为了能够更好的使用索引,我们应该对它多做一些了解。

索引是什么

数据库对象的索引其实和书的目录很类似,它的目的就是为了提高从表中检索字段的速度。
    实现原理是特定字段先执行一次排序,然后每次需要指定数据前,先对从索引中查询,因为索引是特殊的数据结构,所以查询速度非常快。

索引类型
    常见的索引类型有三种,全文索引,唯一索引,普通索引.

索引方法
    在mysql数据中,常用的索引方法有B-Tree索引,哈希索引
    哈希索引,是把使用哈希函数,映射到哈希表上,这种查找数据的方式空间复杂度是O(n),时间复杂度是O(1);
    但是哈希索引只能对某一特定数据进行查找,没有办法查询到某一数据段集合所需要的数据。(ps:innoDB与MyISAM不支持hash索引,所以一般直接选择B树索引即可)
    B-Tree索引,要想了解B-Tree索引,那么首先你就不得不了解B-Tree这种数据结构,它是一种多路平衡搜索树,可以对区间进行查找,在B-Tree中,所有的数据都保存在叶节点,进行区间查找的时候,首先找到区间最小值,然后找到最大值,在这之间所有的数据即为查找的数据

什么情况下用什么索引

经常查询的字段,或者说总是在where字句中出现
    order by或者group by的字段
    主键或者外键
    唯一完整性约束等

选择合适的索引方法

选择索引的时候,索引类型对应数据的特性,而索引方法则对应查找的方法,如果没有建立正确的索引,那么还不如不建立索引,其实大多数情况下,选择普通索引方法即可,但是存在某些特殊的情况,我们需要特定的索引
    比如说唯一索引,唯一索引或者说更多的是一种约束,当某一字段具有唯一性质时,选择唯一索引,如主键和外键等。
    如果某字段数据比较大,如保存的是某一篇博客的内容,并且改动较少,那么可以建立全文索引,全文索引比较消耗内存空间

尾语

索引是一种优化查询效率的方法,但是请不要滥用,滥用索引真的还不如不用索引。

时间: 2024-10-17 14:15:31

浅谈索引的相关文章

Python 浅谈索引以及常用数据类型(字符串、整型、布尔型)

1.整型(int) age = 18 py2 int 32位电脑:-2147483648-2147483647 64位电脑:-9223372036854775808-9223372036854775807 超出范围后python自动将其转换为long(长整型) 整型除法只能保留整数位 from __future__ import division v = 9/2 print(v) py3 只有int 整型除法只能保留所有 2.布尔值(bool/boolen) 只有两个值(True/False)

浅谈MySQL索引背后的数据结构及算法

摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持 也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree索引,因为这是 平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论. 文章主要内容分为四个部分. 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础. 第二部分结合MySQL数据库中

单页应用SEO浅谈

单页应用SEO浅谈 前言 单页应用(Single Page Application)越来越受web开发者欢迎,单页应用的体验可以模拟原生应用,一次开发,多端兼容.单页应用并不是一个全新发明的技术,而是随着互联网的发展,满足用户体验的一种综合技术. SEO 一直以来,搜索引擎优化(SEO)是开发者容易忽略的部分.SEO是针对搜索(Google.百度.雅虎搜索等)在技术细节上的优化,例如语义.搜索关键词与内容相关性.收录量.搜索排名等.SEO也是同行.市场竞争常用的的营销手段.Google.百度的搜

浅谈mysql主从复制的高可用解决方案

1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID",开源软件,由 LINBIT 公司开发.DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中.他是有内核 模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能.也就是说当你将数据写入本地的DRBD设备上的文件系统 时, 数据会同时被发送到网

Core Data浅谈系列之十 : 关于数据模型中实体的属性

之前写了<Core Data浅谈系列汇总>,今天稍微回顾了下,做些补充. 在这个系列的第一篇<基础结构>中(2013年1月份的文章,时间过得好快啊!),有简单带过Entity的Attribute: 数据类型.布尔值统一用NSNumber来表示: 字符串类型用NSString表示: 时间类型用NSDate表示: 二进制数据类型用NSData表示: 非标准类型用Transformable来表示: 而Attribute还有其自身的Properties,比如Transient表示不用持久化

浅谈 js 正则之 test 方法

原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. ? 1 2 3 4 5 var re = /\d/; console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1"

浅谈程序员该具备的自我修养

各行各业的工作者,都有其要求,那么作为程序员,我们又该具备哪些素养呢?博主在这里浅谈个人看法,如有不当之处,请大佬们指正. 一.知识储备 1.数学 或许在很多人看来,学计算机用不到什么数学,最多也就是一百以内的加减乘除,用在for循环.数组索引之类的上面.但其实不然,大部分人这样觉得是因为基本都工作在应用层,所以相对而言,用到的数学知识会比较少,也比较浅显. 而当从应用层更深地学习研究时,就需要一定的数学能力了. 2.计算机 1)操作系统 操作系统(OS)是配置在计算机硬件上的第一层软件.是对硬

关系型数据库表结构设计规范-浅谈(转)

数据库表结构设计规范-浅谈,为啥是浅谈呢,因为主要的观点还是来自原微信公共账号的一篇文章,稍微加了一些自己的看法. 谁来进行数据库的设计? 肯定是具体的开发工程师来进行,开发同学的话,第一业务熟悉度比较高,第二结合OO和ORM的思想,能有比较好的运用关系型数据库的特性.如果是DBA同学的话,虽然对于数据库本身了解比较多,但是对于业务了解较少,很难有比较客观的设计.但是业务上线或者运行期间,需要DBA同学能够重度的加入进来,针对一些性能点和不合理的点进行优化,同事也可以在上线前,针对SQL进行re

RCP开发浅谈之SWT,JFACE

RCP开发浅谈之SWT,JFACE SWT 什么是SWT? SWT全名是Standard Widget Toolkit是一个开源的GUI编程框架,我们每一个java开发者,在学习java开发的时候都会接触到awt以及swing这两个图形库,与awt,swing两个图形库不同,swt的优势体现于底层调用本地的图形库,大大提高了运行速度(损失了一定跨平台性).SWT的一个很重要的一点,一个控件并不是单独存在的,而是存在于父控件中.这样当父控件disposed后,子控件也一定很disposed了.每一