1.4唯一索引
①当表的某列被指定为unique约束时,这列就是一个唯一索引
create table ddd(id int primary key auto_increment , name varchar(32) unique);
这时, name 列就是一个唯一索引.
unique字段可以为NULL,并可以有多NULL(insert values (1,null) ), 但是不能是’’,但是如果是具体内容,则不能重复.
主键字段,不能为NULL,也不能重复.
②在创建表后,再去创建唯一索引
create table eee(id int primary key auto_increment, name varchar(32));
create unique index 索引名 on 表名 (列表..); 1.查看索引
desc 表名 【该方法的缺点是: 不能够显示索引名.】
show index(es) from 表名
show keys from 表名
2.删除
alter table 表名 drop index 索引名;
如果删除主键索引。
alter table 表名 drop primary key (只有一个不需要指定索引名) [这里有一个小问题]
3.修改
先删除,再重新创建. 建立索引的注意事项(索引是在where里面使用的):
索引的代价:
1.索引文件,占用磁盘空间
2.对查询变快,对增删改变慢(增删改之后要重新建索引文件,增删改没有查询多9:1,)
3.在哪些列上适合添加索引?
总结: 满足以下条件的字段,才应该创建索引.
a: 肯定在where条经常使用 b: 该字段的内容不是唯一的几个值(sex,因为二叉树太矮了) c: 字段内容不是频繁update(频繁重构索引).d:不会出现在WHERE子句中字段不该创建索引 使用索引的注意事项:
把dept表中,我增加几个部门:
alter table dept add index my_ind (dname,loc); // dname 左边的列,loc就是右边的列
说明,如果我们的表中有复合索引(索引作用在多列上), 此时我们注意:
1,对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。
explain select * from dept where loc='aaa'\G
就不会使用到索引
2,对于使用like的模糊查询,查询如果是‘%aaa’不会使用到索引,‘aaa%’会使用到索引。
比如: explain select * from dept where dname like '%aaa'\G:(全表查询)
不能使用索引,即,在like查询时,关键的 ‘关键字’ , 最前面,不能使用 % 或者 _这样的字符., 如果一定要前面有变化的值,则考虑使用 全文索引->sphinx.
3,如果条件中有or,即使其中有条件带索引也不会使用索引。换言之,就是要求使用的所有字段都必须建立索引, 才能够使用到索引
select * from dept where dname=’xxx’ or loc=’xx’ or deptno=45
4,如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不会使用到索引。(添加时,字符串必须’’), 也就是,如果列是字符串类型,就一定要用 ‘’ 把他包括起来.
5,如果mysql估计使用全表扫描要比使用索引快,则不使用索引。(用explain查看是否使用了索引) 如何查看索引使用的情况:
mysql> show status like 'Handler_read%';
+-----------------------+---------+
| Variable_name | Value |
+-----------------------+---------+
| Handler_read_first | 0 |
| Handler_read_key | 0 |
| Handler_read_last | 0 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 4000001 |
+-----------------------+---------+
大家可以注意:
handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。
handler_read_rnd_next:这个值越高,说明查询低效。
大批量插入数据(MySql管理员) 了解
对于MyISAM:
alter table table_name disable keys;
loading data//insert语句;
alter table table_name enable keys;
对于Innodb:
1,将要导入的数据按照主键排序
2,set unique_checks=0,关闭唯一性校验。
3,set autocommit=0,关闭自动提交。
sql语句的小技巧:
在使用group by 分组查询是,默认分组后,还会排序,可能会降低速度.

比如: Using filesort是对文件排序。在group by 后面增加 order by null 就可以防止排序.
1.有些情况下,可以使用连接来替代子查询。因为使用join,MySQL不需要在内存中创建临时表。
select * from dept, emp where dept.deptno=emp.deptno; [简单处理方式]
select * from dept left join emp on dept.deptno=emp.deptno; [左外连接,更ok!] 如何选择mysql的存储引擎:
在开发中,我们经常使用的存储引擎 myisam / innodb/ memory
myisam 存储: 如果表对事务要求不高,同时是以查询和添加为主的,我们考虑使用myisam存储引擎. ,比如 bbs 中的 发帖表,回复表.
INNODB 存储: 对事务要求高,保存的数据都是重要数据,我们建议使用INNODB,比如订单表,账号表. 问 MyISAM 和 INNODB的区别
1. 事务安全,MyISAM 不支持事务。INNODB支持事务。
2. 查询和添加速度,MyISAM 快,添加的时候就是添加到最后。INNODB会排序。
3. 支持全文索引,MyISAM 支持,INNODB不支持。
4. 锁机制,MyISAM 是表锁要快。INNODB是行锁要慢。
5. 外键 MyISAM 不支持外键(hibernate映射会不成功), INNODB支持外键. (在PHP开发中,通常不设置外键,通常是在程序中保证数据的一致) Memory 存储,比如我们数据变化频繁,不需要入库(数据在内存中,重启mysql数据全部丢失),同时又频繁的查询和修改,我们考虑使用memory, 速度极快.

(有的表的存储引擎是myisam、innodb、memory,不一定所有表的存储引擎都一样) 如果你的数据库的存储引擎是myisam,请一定记住要定时进行碎片整理(删除数据后文件并没有减小)

举例说明:
create table test100(id int unsigned ,name varchar(32))engine=myisam;
insert into test100 values(1,’aaaaa’);
insert into test100 values(2,’bbbb’);
insert into test100 values(3,’ccccc’); Delete from test100 where id = 3; //文件不会减小 我们应该定义对myisam进行整理,文件就减小了。
mysql> optimize table test100;
+--------------+----------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------+----------+----------+----------+
| temp.test100 | optimize | status | OK |
+--------------+----------+----------+----------+ //通过代码进行优化
mysql_query(“optimize tables $表名”);

mysql13---索引使用注意的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(7):索引器

    在开始正题之前,先补充一点前面的内容. 在方法中,如果要引用方法参数,前面的示例中,老周使用的是 CodeVariableReferenceExpression 类,它用于引用变量,也适用于引用方法参 ...

  2. SQLSERVER聚集索引与非聚集索引的再次研究(上)

    SQLSERVER聚集索引与非聚集索引的再次研究(上) 上篇主要说聚集索引 下篇的地址:SQLSERVER聚集索引与非聚集索引的再次研究(下) 由于本人还是SQLSERVER菜鸟一枚,加上一些实验的逻 ...

  3. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  4. C# 索引器,实现IEnumerable接口的GetEnumerator()方法

    当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...

  5. 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

    本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...

  6. 开源 iOS 项目分类索引大全 - 待整理

    开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...

  7. SQL 数据优化索引建suo避免全表扫描

    首先什么是全表扫描和索引扫描?全表扫描所有数据过一遍才能显示数据结果,索引扫描就是索引,只需要扫描一部分数据就可以得到结果.如果数据没建立索引. 无索引的情况下搜索数据的速度和占用内存就会比用索引的检 ...

  8. MSSQL 事务,视图,索引,存储过程,触发器

    事务 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.这特别适用于多用户同时操作的数据 ...

  9. SQL Server 2014聚集列存储索引

    转发请注明引用和原文博客(http://www.cnblogs.com/wenBlog) 简介 之前已经写过两篇介绍列存储索引的文章,但是只有非聚集列存储索引,今天再来简单介绍一下聚集的列存储索引,也 ...

  10. SQL Server事务、视图和索引

    废话不多说,直接上干货 14:13:23 事务 概括:事务是一种机制,一个操作序列,包含一组数据库操作命令,并且把所有的命令作为一个整体一起 向系统提交或撤销操作 请求. 事务的特性:   1.原子性 ...

随机推荐

  1. LeetCode(37) Sudoku Solver

    题目 Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by ...

  2. HDU 1242 Rescue 营救天使

    Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is describe ...

  3. DEV Express中ImageCollection的使用

    1,        ImageCollection作为窗体组件的一种,位于Components分类下,拖进窗体以后,显示在界面的底部. 2,        注意ImageCollection的Imag ...

  4. idea 中使用 出现 svn: E155036

    在idea中使用svn  checkout时  svn出现如上错误. 原因本地的工作副本太旧.command line进入本地工作副本的根目录,执行svn upgrade后 重启idea就可以了.

  5. 【MVC 2】MVC+EF框架结构实例:注册ID号验证

    导读:本篇博客,将通过一个实例,详细介绍MVC+EF的应用.原理性的东西或者说是进一步的解耦和,请看博客: [框架结构 3]MVC+EF实体框架-原理解析.在这里,仅用MVC框架和一个EF生成的Mod ...

  6. irules事件和命令

  7. P1979 [NOIP]华容道

    [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 B 玩的华 ...

  8. linux下reboot和shutdown关机命令详解

    我 们在操作Linux v/服务器的时候肯定会有需要重启系统,或者关闭系统等操作.有些用户是直接到VPS主机商家面板上操作的,这样一来比较麻烦,二来有些面板还不易于使用 容易导致面板卡死.所以最好的方 ...

  9. 设置select的默认选项

    2014-01-07 09:54:34|   通过后台传出的值进行选择默认项的设置 <select name="user_id" id="user_id" ...

  10. Spring中基于AOP的XML架构

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/aop-with-spring-framenwork/xml-schema-based-aop-wi ...