一:索引

索引是创建在数据库表上,其作用是提高对表中数据的查询速度。

假设数据库中有一张1000条记录的表格,如果没有创建索引的话,用户想通过查询条件查询,实际上是把整个数据库中1000条记录都读取一遍,满足查询条件的就加入结果集中,这样效率很低,如果表中创建了针对查询条件字段的索引,查询的时候会立即找到满足条件的记录加入结果集,不需要遍历过程,这样大大提高了数据库查询效率。

创建索引虽然提高了数据库表格的查询效率,但是也增加了数据库维护速度,因为索引需要占用物理空间,其次每次用户插入,更改,删除记录的时候都要同步操作索引,这样就造成数据维护速度降低,所以使用索引需要综合考虑索引的优点和缺点。

使用索引的几个建议

1.对经常作为查询条件的字段使用索引

2.如果需要用到索引尽量在整型字段上面使用索引

3.尽量使用唯一性的字段来创建索引

4.限制索引的数目,因为索引是占用物理空间的,并且数据更新需要同步操作索引,所以在索引的数量上面需要综合考虑

5.删除不再使用或者很少使用的索引

6.用户也可以在插入,更改,删除记录的时候先删除掉索引,在操作数据库,然后增加索引来使用

创建索引有几种方法:

1.创建表格的时候创建索引

创建普通索引

INDEX(字段名);

任意字段都可以

创建唯一索引

UNIQUE INDEX 索引名称(字段名);

唯一性字段可以,比如主键就是唯一字段或者约束属性是unique的字段

创建全文索引

FULLTEXT INDEX 索引名称(字段名);

CHAR、VARCHAR、TEXT类型字段上面可以

创建单列索引

INDEX 索引名称(字段名(限制长度));

对于字符型数据不同判断全部字符,只需要判断前面限制长度的字符就型了,目的还是提高查询速度

创建多列索引

INDEX 索引名称(字段名1, 字段名2...);

只有查询条件中使用了第一个字段名才会生效

比如创建多列索引:INDEX INDEX_TABLE(username, password, time);

这里创建了三个字段的索引,实际上MYSQL创建了三个索引分别是username,password。username,time。username,password,time。这样就能很清楚看到如果查询条件中使用WHERE PASSWORD="" AND TIME=""这种的话,是不会用到这个索引的,查询条件中没有索引第一个字段USERNAME。

创建空间索引

这个很少用到,这里就暂时不说。。

2.在已有的表格中创建索引

CREATE [UNIQUE/FULLTEXT/SPATIAL] INDEX 索引名 ON 表名 (字段名(限制长度));

3.用ALTER TABLE语句来创建索引

ALTER TABLE 表名 ADD [UNIQUE/FULLTEXT/SPATIAL] INDEX 索引名 (字段名(限制长度));

删除索引:

DROP INDEX 索引名 ON 表名;

二:触发器

触发器,顾名思义就是通过某个特定的事件来触发另外一个事件,我们把”通过某个特定的事件“称为触发条件,这个条件有INSERT,UPDATE,DELETE,最终触发另外一个事件就是我们具体要数据库操作的步骤了,试下下如果有两张表,表A中记录学生和对应年龄的数据,表B中记录学生和体重的数据,现在有个学生退学了,那么我们要把表A中这个学生的记录删除掉,表B中这个学生的记录也要同时删除,这样就起到一个数据同步的作用,这里用触发器的话,就是当表A中该学生记录被DELETE掉,触发事件来DELETE掉表B中该学生的记录,所以触发器在实际运用中还是有存在的意义的。

注意:触发条件和触发事件不能作用于同一张表中!

创建一个一条执行语句的触发器:

CREATE TRIGGER 触发器名 [BEFORE/AFTER] [INSERT/UPDATE/DELETE] ON 表名 FOR EACH ROW 执行语句;

创建一个多条执行语句的触发器:

CREATE TRIGGER 触发器名 [BEFORE/AFTER] [INSERT/UPDATE/DELETE] ON 表名 FOR EACH ROW BEGIN 执行语句列表 END;

[BEFORE/AFTER]:    说明是在触发之前就执行语句还是触发之后执行。

[INSERT/UPDATE/DELETE]:    说明触发条件是INSERT或UPDATE或DELETE。

执行语句列表:    以”;“号分开的执行语句,但是MYSQL默认是以”;“号来做结束的,所以可以用”DELIMITER &&“把数据库结束符换成&&,等触发器创建完后在改回”;“。

查看触发器:

SHOW TRIGGERS;

删除触发器:

DROP TRIGGER 触发器名;

MYSQL数据库学习----索引和触发器的更多相关文章

  1. Mysql 数据库学习笔记05 触发器

    一.触发器 * 是由时间来出发某个操作,这些事件可以包括 insert.update.delete.等语句.当执行这些操作时,就会触发对应的操作. * 创建一个执行语句的触发器: create tri ...

  2. Mysql数据库学习笔记之数据库索引(index)

    什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...

  3. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. 千万级MySQL数据库建立索引,提高性能的秘诀

    实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化.数据表结构的优化.系统配置的优化和硬件的优化四个方面,如下图所示: SQL语句及索引的优化 SQL语句的优化 SQL语 ...

  5. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. MySQL数据库学习: 01 —— 数据库的概述

    壹 概述 一 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件). 易混淆:人们常常用“数据库”这个词语来代表他们使 ...

  8. MySQL数据库之索引

    1 引言 在没有索引的情况下,如果要寻找特定行,数据库可能要遍历整个数据库,使用索引后,数据库可以根据索引找出这一行,极大提高查询效率.本文是对MySQL数据库中索引使用的总结. 2 索引简介 索引是 ...

  9. MYSQL数据库学习笔记1

      MYSQL数据库学习笔记1 数据库概念 关系数据库 常见数据库软件 SQL SQL的概念 SQL语言分类 数据库操作 创建数据库 查看数据库的定义 删除数据库 修改数据库 创建表 数据类型 约束 ...

随机推荐

  1. python两个类之间变量和函数的调用

    1.class_a() class_b() 2.class_b使用class_a中的变量和函数 3.变量class_a中:class_a.num=... 函数class_b中:先实例化class_a( ...

  2. Java下接口interface前面要不要加I

    说明:加I和不加I都可以,看需要,没有强制要求. 在Java中更多是提倡不加I的,可以看下JDK的源码,都是不加I的. 微软C#是规定要加I,这也是影响从而导致有这个话题的原因. Java中特定不直接 ...

  3. Maven学习使用Nexus搭建Maven私服

    原文:http://www.cnblogs.com/quanyongan/archive/2013/04/24/3037589.html 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给 ...

  4. 【mac】mac上使用brew 安装速度慢/每次使用brew 都会卡在updating homebrew不动/更换homebrew的镜像源

    有没有出现一下这样的情况: 如果有,请继续往下走 1.打开mac的命令窗口,键入如下命令 cd /usr/local/Homebrew 2.更换homebrew的默认源[更换为中科大的镜像源] git ...

  5. 快速上传到rackspace cdn工具turbolift swift 安装

    快速上传到rackspace cdn 工具安装,2步即可完成: 1.安装git CentOS的yum源中没有git,只能自己编译安装,现在记录下编译安装的内容,留给自己备忘. 确保已安装了依赖的包 y ...

  6. cocos2d-x 3.0 final 移植 android

    准备工作 你仅仅要依照上一篇的 cocos2d-x 3.0 final 环境搭建 完毕就能够了 1.编辑proj.android\jni\Android.mk,更改内容例如以下 LOCAL_PATH ...

  7. BUPT 2012复试机考 4T

    题目描述 我们都学习过计算机网络,知道网络层IP协议数据包的头部格式如下: 其中IHL表示IP头的长度,单位是4字节:总长表示整个数据包的长度,单位是1字节.传输层的TCP协议数据段的头部格式如下:  ...

  8. ZOJ ACM 1314(JAVA)

    昨天做了几个题目.过于简单,就不在博客里面写了. 1314这道题也比較简单,写出来是由于我认为在这里有一个小技巧,对于时间复杂度和空间复杂度都比較节省. 这个题目类似哈希表的求解.可是更简单.刚拿到题 ...

  9. fill函数和fill_n函数

    fill_n函数的作用是:给你一个起始点,然后再给你一个数值count和val.把从起始点开始依次赋予count个元素val的值. 注意: 不能在没有元素的空容器上调用fill_n函数 列子:     ...

  10. 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期

    腾讯云图片鉴黄集成到C#   官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: public c ...