MySQL随笔(2)
索引本身是一个独立的存储单位,在该单位里边有记录着数据表某个字段和字段对应的物理空间.索引内部有算法支持,可以说查询速度非常快.
聚簇索引;聚簇索引不是单独的索引而是一种数据存储方式;
聚簇索引的优点是访问的速度更快;缺点是插入速度严重依赖插入顺序,更新聚簇索引列的代价很高,页分裂会导致表占用更多的磁盘空间.
工作原理:首先在索引中查找对应的值,其次根据匹配的索引找到相应的值,然后根据匹配到的索引的纪录找到相对应的数据行,最后将数据结果集返回给用户;
索引速度快的原因: 有算法的技术支持,索引字段与物理地址有直接对应.
优点:
可以给任意字段进行索引;
极大地加快查询速度;
缺点:
创建和维护都需要时间,并且随着数据量的提升所耗费的时间也会增加;
需要占据大量的空间;
将对表中的数据进行增删改查时,索引也需要动态维护,降低了数据的维护速度,
索引的类别:
一、单列索引,一个索引中一个索引中只包含一个列,但是一个表中可以拥有多个单列索引:
普通索引;(index)
唯一索引,允许被索引的数据列包含重复的值(关键字为unique,更多的是为了避免数据重复)允许有空值;
主键索引(关键字为primary) 不允许有空值;
二、全文索引
全文索引(fulltext index) myisam可以设置该索引,只能在myisam引擎上才能使用,只能通过char,varchar,textleixing的字段中才能使用全文索引;
三、组合索引(复合索引):在表中多个字段组合上创建索引只有查询条件中使用了这些字段的左边字段时,索引才会被使用 遵循最左前缀原则.
E.G: index multildx(id,name,age),查询时按照id,name,age或id,name或id,这些情况都会触发索引,age或name,age则不会,这就只最左前缀.
四、空间索引, 空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种: geometry, point, linestring, polygon;要求是引擎是myisam 必须将其声明为not null ,主要运用于地图,游戏;
其他 一、外键索引,简称外键,只有innodb存储引擎的表才能使用外键,如果要删除父表的记录(分列表),必须要先删除子表(带外键的表),不然会出错;
创建唯一索引: create table t1 (id int not null, name char(30) nit null, unique index uniqidx(id));
创建全文索引:create table t2 (id int not null, name char(30) nit null,name nvarchar(50) not null,age int not null, fulltext index FUDEX(name));
创建组合索引:create table t3 (id int not null, name char(30) nit null,name nvarchar(50) not null,age int not null, index dex(id,name,age));
创建空间索引:create table ee(id int not null,name varchar(50) not null,age int not null,a geometry not null,spatial index 11b(a));
建完表格后添加索引: alter table ff add index dexx(name(50));
MySQL的索引类型有很多,但是底层存储的数据结构都是B_TREE,B树索引有自己的限制,
如果不是按着索引最左列开始查找就无法使用索引
使用索引时,不能跳过索引中的列
not in和<>操作无法使用索引
如果索引中有某列的查询范围,则其右边的所有列都会无法使用索引
注意: 尽量避免在索引上的列上使用表达式或函数.
索引列具有选择性,索引的选择性是不重复的索引值合表的记录数的比值;
更新索引统计信息及减少索引碎片: analyze table table_name;
事务的隔离性的四个级别:
读取未提交内容(read uncommitted ,也被称之为脏读);
读取提交内容(read committed);
可重读(repeatable read),会出现"幻读"的问题;
可串行化 (serializable),最高级别隔离.
多版本并发控制(multiversion concurrency control).MySQL的默认隔离级别是可重读,利用MVCC机制来解决幻读.
多版本并发控制就是在每一行记录的后面增加两个隐藏列,记录创建版本号和删除版本号,而每一个事务在启动的时候都有一个唯一的递增的版本号.只有read committed和repeatable read 两种事务隔离级别才会使用MVCC,read uncommitted由于是读到未提交的,所以不存在版本问题,而serialiazbel会对所有的读取行进行加锁;
脏读: 当一个事物正在访问数据时,并对数据进行了修改,而这个修改后的数据还没有提交到数据库中,这时另一个事务,也在访问这个数据,然后使用了这个数据;
不可重复读: 在一个事务中,多次读取同一个数据,在这个事务还没结束时,另一个事务也访问该数据,由于第二个事务的修改,第一个事务读取到的数据可能是不一样的,这样就发生了在同一个事务中两次读到的数据是不一样的,因此别称之为不可重复读.
幻读: 是指事务不是独立执行时的一种现象,第一个事务对表中的数据进行修改,这种修改涉及到表中的所有数据行,同时,第二种事务也修改这个表中的数据,这次的修改是向表中插入一行数据,这是第一中操作时就会出现有一个数据行没有被修改的幻觉.
除了事物的三个基本的命令外,还有一个savepoint命令(保存点命令),可以把一个事务分割成几个部分,可以指定在什么位置进行回滚操作.
MySQL随笔(2)的更多相关文章
- ORACLE 迁移MYSQL 随笔
1.把服务器上的ORALCE 数据库导成DMP,然后导入本机的临时库 2.先把ORACLE 表中的DATE 改为TIMESTAMP; a.先建立个表 create table type_table_i ...
- mysql随笔
MySQL查询优化器--非SPJ的优化 MySQL查询优化器--非SPJ优化(一)--GROUPBY优化 http://blog.163.com/li_hx/blog/static/183991413 ...
- MySQL随笔(1)
mysql是一种关系型数据库,和SQL ,oracle一样是较为常用的关系型数据库,属于oracle旗下的产品,在web应用方面,MySQL是最好的RDBMS(relational database ...
- mysql随笔系列-1
MySQL数据库管理 本人实验所用的MySQL数据库版本:5.5.56-MariaDB MariaDB Server 操作系统:centos7.5 1.创建数据库 MariaDB [(none)]& ...
- 深入MYSQL随笔
(1)查询生命周期:从客户端到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回给客户端.执行是整个生命周期中,最重要的阶段. (2)慢查询基础:优化数据访问,减少访问的数据行. (3)查询不 ...
- Mysql 随笔记录
Soundex 声音相似的 select * from demos where Soundex('title') = Soundex('标示'); Concat 拼接语句 select concat( ...
- MYSQL随笔心得1
cmd链接数据库命令: 输入密码进入 显示全部的数据库: 退出服务器连接,还有/p quit 非关系型数据库:NOSQL,not only sql 不仅仅是SQL 代表:redis,mongodb
- mysql 随笔
(select GROUP_CONCAT(car_brand_name separator ',') carBrandName,supplier_id from ycej_supplier_carbr ...
- VS2010/VS2013项目创建及通过ADO.NET连接mysql/sql server步骤(VS2013连接成功步骤见上一篇随笔)
本随笔主要是对初学者通过ADO.NET连接数据库的步骤(刚开始我也诸多不顺,所以总结下,让初学者熟悉步骤) 1.打开VS新建一个项目(这里的VS版本不限,建项目都是一样的步骤) VS2010版本如图: ...
随机推荐
- 在Unity中实现小地图(Minimap)
小地图的基本概念众所周知,小地图(或雷达)是用于显示周围环境信息的.首先,小地图是以主角为中心的.其次,小地图上应该用图标来代替真实的人物模型,因为小地图通常很小,玩家可能无法看清真实的模型.大多数小 ...
- 判空、判等、转码的StringUtil
目录 StringUtil类 StringUtil类 import java.io.UnsupportedEncodingException; /** * 字符串工具 */ public class ...
- HTML 练习拖动面板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 一起学Android之Dialog
概述 对话框(Dialog)是一个小窗口,在Android系统开发中经常会用到,它提示用户做决定或者输入一些东西,对话框并不填充屏幕,是一个模态(Modal)窗口.Dialog类是所有对话框的基类,应 ...
- June 30th. 2018, Week 26th. Saturday
Curiosity is the wick in the candle of learning. 如果学习是一根蜡烛,那好奇心就是烛芯. From William Arthur Ward. Pleas ...
- rabbitmq消费者“无故消失”
hi,all 导读:9月1号17:12左右,发现影子队列存在大量“unacked”(收到了消息,但是还没有手动确认消息)的消息,一段时间后“unacked”的数量没有减少,但是观察消费者端的日志, ...
- V8引擎的垃圾回收策略
V8 的垃圾回收策略主要基于分代式垃圾回收机制.所谓分代式,就是将内存空间分为新生代和老生代两种,然后采用不同的回收算法进行回收. 新生代空间 新生代空间中的对象为存活时间较短的对象,大多数的对象被分 ...
- CYQ.Data 支持分布式数据库(主从备)高可用及负载调试
前言: 继上一篇,介绍 CYQ.Data 在分布式缓存上支持高可用,详见:CYQ.Data 对于分布式缓存Redis.MemCache高可用的改进及性能测试 本篇介绍 CYQ.Data 在对数据库层面 ...
- 开启全民窃听风云——C#智能录音录像录屏程序源码放送!
·引子 我这人从小有个坏毛病,就是喜欢偷窥别人隐私.当然,在道德上,我时刻要求自己做一名正人君子,只不过是心理上有这癖好罢了.所以我从小就对窃听.窃视.黑客技术.破解技术等疯狂着迷!实际上这也是我走上 ...
- go get golang.org被墙问题解决
go get golang.org被墙问题解决 今天在下载golang.org/x/image/tiff的时候出错 > go get -v golang.org/x/image/tiff Fet ...