MySQL有一个很有意思的索引类型,叫做前缀索引,它可以给某个文本字段的前面部分单独做索引,从而降低索引的大小. 其实,Oracle也有类似的实现,对于文本,它可以通过substr的函数索引,实现同样甚至更多的功能.另外,经过探索,我们发现,原来数字和时间字段,在Oracle也可以实现类似的功能. MySQL的前缀索引 MySQL的前缀索引指的是对指定的栏位的前面几位建立的索引. Altertable Table_Name add key(column_name(prefix_len)); 或者…
没有索引时mysql是如何查询到数据的 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页面在磁盘上随机分布,需要进行10^4次I/O,假设磁盘每次I/O时间为10ms(忽略数据传输时间),则总共需要100s(但实际上要好很多很多).如果对之建立B-Tree索…
索引永远是最好的查询解决方案嘛? 索引并不总是最好的工具.总的来说,只有当索引帮助存储引擎快速查找到记录带来的好处大于其带来的额外工作(比如插入操作后索引的维护)时,索引才是高效的. 对于非常小的表:大部分情况下简单的全表扫描更高效. 中到大型表:索引非常高效. 特大型表:建立和使用索引的代价非常高,可以使用分库分表或分区技术代替. 高性能的索引策略 索引的选择性越高则查询效率越高 因为选择性高的索引可以让MySQL在查找时过滤掉更多的行.唯一索引的选择性是1,这是最好的索引选择性,性能也是最好…
​ mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误: ​ 从上图中,我们可以看出,使用的是innodb及字符集.错误提示是长度太长了:Specified key was too long; max key length is 767 bytes 来查看下创建表的语句: CREATE TABLE `xxl_job_registry` ( `id` int(11) NOT NULL AUTO_INCREMENT, `registry…
旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://mp.csdn.net/postedit/80910082 索引概念:     索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查.建立索引是一项技术性要求高的工作.一般在数据库设计阶段的与数据库结构一道考虑.应用系统的性能直接与索引的合理直接有关. 一.Oracle索引 1.索引类型 列出常见常用的几种索引类型,如下: 非唯一索引(最常用) NonUnique 唯一索引  Uni…
索引 索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度. 联合索引 又名复合索引,由两个或多个列的索引.它规定了mysql从左到右地使用索引字段,对字段的顺序有一定要求.一个查询可以只使用索引中的一部分,更准确地说是最左侧部分(最左优先).如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效. CR…
1.索引类型: 1.1B-tree索引: 注:名叫btree索引,大的方面看,都用的是平衡树,但具体的实现上,各引擎稍有不同,比如,严格的说,NDB引擎,使用的是T-tree,但是在MyISAM,Innodb中,默认的使用的是B-tree索引 但我们抽象一下---B-tree系统,可以理解成为“排好序的快速查找结构” 1.2hash索引 在memory表中,默认的是hash索引,hash的理论查询时间复杂度为O(1) 那为啥hash的查找如此的搞笑,为什么都不用hash索引? 答:1.hash函…
有时需要索引很长的字符列,它会使索引变大而且变慢.一个策略就是模拟哈希索引.但是有时这也不够好,那? 通常可以索引开始的几个字符,而不是全部值,以节约空间并得到好的性能.这使索引需要的空间变小,但是也会降低选择性.索引选择性是不重复的索引值 和表中所有行的比值.高选择性的索引有好处,因为它使mysql在查找匹配的时候可以过波掉更多的行.唯一索引的选择率为1,为最佳值. 如果索引BLOG和TEXT列,或者很长的varchar列,就必须定义前缀索引,因为mysql不允许索引它们的全文化. 可以在同一…
最近一个项目,涉及到sql server 2008,因为业务需求,希望建立一个唯一索引,但是发现在sql server中,唯一索引字段不能出现多个null值,下面是报错信息: CREATE UNIQUE NONCLUSTERED INDEX weixin_openid_ui ON Users(weixin_openid); 因为发现对象名称 'dbo.Users' 和索引名称 'weixin_openid_ui' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止.重复的键值为…
mysql定时脚本(event),类似oracle的job   我有2张表:tb_push_data 和 tb_push_data_log 现在需要每隔一段时间将tb_push_data 符合条件的 数据备份到表 tb_push_data_log   www.2cto.com   --------------------------------------------------------------------------   一.创建存储过程   DELIMITER $$   USE `p…
有时候需要索引很长的字符列,这会让索引变得大且慢.通常可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率.但这样也会降低索引的选择性.索引的选择性是指不重复的索引值(也称为基数,cardinality)和数据表的记录总数的比值,范围从1/#T到1之间.索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更多的行.唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的. 一般情况下某个前缀的选择性也是足够高的,足以满足查询性能.对于BLOB,TEXT…
数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度.索引优化是数据库优化的最重要手段. 如果查询语句使用索引(通常是where条件匹配索引)就会利用树的结构加快查找,索引会按值查找到要查找的行在表中位置,不需回表查询数据的就是聚簇索引(索引和数据存放在一起).通常是需要回表再查数据,需要消耗额外的磁盘IO.所以有些时候(如按顺序读取数据)全表扫描会比使用索引快的原因就在于此. 查询条件只有一个字段时,…
高效使用索引的首要条件是知道什么样的查询会使用到索引,这个问题和B+Tree中的“最左前缀原理”有关,下面通过例子说明最左前缀原理. 一.最左前缀索引 这里先说一下联合索引的概念.MySQL中的索引可以以一定顺序引用多个列,这种索引叫做复合(联合)索引,一般的,一个联合索引是一个有序元组<a1, a2, …, an>,其中各个元素均为数据表的一列,实际上要严格定义索引需要用到关系代数,但是这里我不想讨论太多关系代数的话题,因为那样会显得很枯燥,所以这里就不再做严格定义.另外,单列索引可以看成联…
Mysql可以使用字符串前缀 作为索引 以节约空间. 下面我们以 Java的UUID 生成的 32位(移除UUID中的 中划线)字符串 来做一下 测试. 表结构: CREATE TABLE `test_uuid` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `uuid` varchar(36) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT DEFAULT CHA…
引入 通常在开发中我们需要定义字符串类型的字段,例如用户名或者用户邮箱等. 假设我们在维护一个用户登录系统,用户表的定义: create table User( ID bigint unsigned primary key, email varchar(64) )engine=Innodb; 如果使用邮箱登录的话,查询语句可能这样写: select ID from User where email='xxx'; 如果email字段没有加索引,那么这个语句只能做全表扫描. 前缀索引 MySQL是支…
一.表空间 mysql的表空间有共享表空间和独占表空间,独占表空间,其实就是一张表一个表空间,其实也就是一张表一个数据文件,共享表空间似乎有点类似oracle的表空间,不同的表可以保存在同一个数据文件里,一般mysql没有单独创建表空间的步骤而oracle要先创建好表空间,然后指定某张表放到某个表空间. 二.数据类型 1.oracle表结构移植到mysql中需要的类型转换 MYSQL ORACLE BLOB(220) RAW(220) BLOB (20) RAW(20) BLOG(1024) R…
1.前言 本章记录MySQL中的索引机制,了解索引可以让数据库更快.索引太多会造成性能损耗,索引太少肯定查询效率不高. 2.InnoDB存储引擎所有概述 InnoDB中常见的索引有: B+树索引 全文索引 哈希索引 哈希索引是自适应的,无法人为干预是否在一张表中生成hash索引. B+树不能找到一个给定键值的具体行,B+树索引能找到的只是被查找数据所在的页,通过将页读取到内存,再定位数据. 3.数据结构与算法 3.1 二分查找法 二分查找也就是折半查找,前提是有序,该算法算是一个基础算法了,思想…
一.常见存储引擎 1.1 InnoDB InnoDB 是 MySQL 5.5 之后默认的存储引擎,它具有高可靠.高性能的特点,主要具备以下优势: DML 操作完全遵循 ACID 模型,支持事务,支持崩溃恢复,能够极大地保护用户的数据安全: 支持多版本并发控制,它会保存数据的旧版本信息,从而可以支持并发和事务的回滚: 支持行级锁,支持类似 Oracle 的一致性读的特性,从而可以承受高并发地访问: InnoDB 组织数据时默认按照主键进行聚簇,从而可以提高主键查找的效率.对于频繁访问的数据,Inn…
有情怀,有干货,微信搜索[三太子敖丙]关注这个不一样的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. 前言 数据库系列更新到现在我想大家对所有的概念都已有个大概认识了,这周我在看评论的时候我发现有个网友的提问我觉得很有意思:帅丙如何设计一个索引?你们都是怎么设计索引的?怎么设计更高效? 我一想索引我写过很多了呀,没道理读者还不会啊,但是我一回头看完,那确实,我就写了索引的概念,优劣势,没提到怎么设计…
MYSQL面试题-索引 引自B站up编程不良人:https://www.bilibili.com/video/BV19y4y127h4 一.什么是索引? 官方定义:索引是一种帮助mysql提高查询效率的数据结构. 索引的优点:大大加快数据查询速度 索引的缺点: ​ 1.维护索引需要耗费数据库资源 ​ 2.索引需要占用磁盘空间 ​ 3.当对表的数据进行增删改的时候,因为要维护索引,速度会受到影响 二.索引的分类 a.主键索引 设定为主键后数据库会自动建立索引,innodb为聚簇索引 b.单值索引…
参考<高性能MySQL>第3版 1 索引基础 1.1 索引作用 在MySQL中,查找数据时先在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行,假如要运行下面查询语句: 如果在uid在建有索引,则MySQL将使用该索引先找到uid为5的行,也就是说MySQL先在索引上按值进行查找,然后返回…
原文:Mysql主键索引.唯一索引.普通索引.全文索引.组合索引的区别 Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不是越多越好,假如这本书1000页,有500也是目录,它当然效率低,目录是要占纸张的,而索引是要占磁盘空间的. Mysql索引主要有两种结构:B+树和hash. hash:hsah索引在mysql比较少用,他以把数据的索引以hash形式组织起来,因此当查找某一条记录的时候,速度非常快.当时因为是has…
第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行,要么都不执行. 事务是作为最小的控制单元来使用的,特别使用与多用户同时操作的数据库系统. 2.为什么需要事务 事务(transaction)是指将一系列数据操作捆绑成为一个整体进行统一管理,如果某一事务执行成功,则在该事务中进行的所有数据均会提交,成为数据库中永久的组成部分.如果事务执行遇到错误且…
数据库的索引非常重要,基本面试数据库的问题都在索引上,所以这里小编整理出来,一方面为了自己复习,一方面也方便大家. 一,索引前传 在了解数据库索引之前,首先有必要了解一下数据库索引的数据结构基础,那么什么样的数据结构可以作为索引呢? B-tree是最常用的用于索引的数据结构.因为它们是时间复杂度低, 查找.删除.插入操作都可以可以在对数时间内完成.另外一个重要原因存储在B-Tree中的数据是有序的.数据库管理系统(RDBMS)通常决定索引应该用哪些数据结构.但是,在某些情况下,你在创建索引时可以…
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论. 文章主要内容分为三个部分. 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础. 第二部分结合MySQL数据库中My…
一,索引前传 在了解数据库索引之前,首先有必要了解一下数据库索引的数据结构基础,那么什么样的数据结构可以作为索引呢? B-tree是最常用的用于索引的数据结构.因为它们是时间复杂度低, 查找.删除.插入操作都可以可以在对数时间内完成.另外一个重要原因存储在B-Tree中的数据是有序的.数据库管理系统(RDBMS)通常决定索引应该用哪些数据结构.但是,在某些情况下,你在创建索引时可以指定索引要使用的数据结构. B+是一个树数据结构,通常用于数据库和操作系统的文件系统中,B+树的特点是能够保持数据稳…
索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的.MySQL提供了Explain,用于显示SQL执行的详细信息,可以进行索引的优化. 一.导致SQL执行慢的原因 1.硬件问题.如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等. 2.没有索引或者索引失效.(一般在互联网公司,DBA会在半夜把表锁了,重新建立一遍索引,因为当你删除某个数据的时候,索引…
MySQL基础 MySQL数据类型 整数类型 TINYINT. SMALLINT. MEDIUMINT. INT. BIGINT 属性:UNSIGNED 长度:可以为整数类型指定宽度,例如:INT(11).对大多数应用是没有意义的,它不会限制值的合法范围,只会影响显示字符的个数. int(3) 可以存 1234 ,不会出错.但是存储 12 并指定 zerofill属性的话,则会在前面补上0,成为012 实数类型 FLOAT. DOUBLE.DECIMAL DECIMAL可存储比BIGINT还大的…
出处:http://blog.codinglabs.org/articles/theory-of-mysql-index.html   摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论.…
php面试专题---16.MySQL创建高性能索引考点 一.总结 一句话总结: 注意:只写精品 1.索引的基础? 类似书籍的目录:索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录,定位对应的页码 索引->行号->数据:存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行 2.索引对性能的影响? 1.大大减少服务器需要扫描的数据量,大大提高查询速度,降低写的速度.占用磁盘 2.帮助服务器避免排序和临时表 3.将随机I/O变顺序I/…