zoukankan      html  css  js  c++  java
  • mysql索引

    mysql索引
    所有的索引都建立在字段上,索引就是系统根据某种算法,将已有数据(未来新增的数据),单独建立一个文件:文件能够快速的匹配数据,并且能够快速的找到对应表中的记录
    索引意义:
    1、提升查询数据效率
    2、约束数据有效性(唯一性等)
    增加索引的条件:索引本身会产生索引文件(有时候比数据还大),会非常耗费磁盘空间。

    增加索引:
    如果某个字段需要作为查询条件并经常使用,那么可以使用索引(一定会想办法增加)
    如果某个字段需要进行数据的有效性,也可以使用索引(主键,唯一性)
    mysql中提供多种索引
    1、主键索引:primary key
    2、唯一索引:unique key
    3、全文索引:fulltext index
    4。普通索引:index

    全文索引:针对文章内部关键字进行索引
    全文索引最大的问题在于如何确定关键字
    英文很容易:英文单词与单词有空格
    中文很难:没有空格,中文可以各种随意组合(分词:sphinx)
    索引的设计原则

    为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。本小节将向读者介绍一些索引的设计原则。
    1.选择唯一性索引
      唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。
    2.为经常需要排序、分组和联合操作的字段建立索引
      经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。
    3.为常作为查询条件的字段建立索引
    如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。
    4.限制索引的数目
      索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间。
    5.尽量使用数据量少的索引
      如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。
    6.尽量使用前缀来索引
      如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。
    7.删除不再使用或者很少使用的索引
      表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。
    注意:选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的准则。读者要在以后的学习和工作中进行不断的实践。根据应用的实际情况进行分析和判断,选择最合适的索引方式。

    1.添加PRIMARY KEY(主键索引) 
    mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 
    2.添加UNIQUE(唯一索引) 
    mysql>ALTER TABLE `table_name` ADD UNIQUE ( 
    `column` 

    3.添加INDEX(普通索引) 
    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 
    4.添加FULLTEXT(全文索引) 
    mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 
    5.添加多列索引 
    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

    下面是更加详细的方法

    MySQL中可以使用alter table这个SQL语句来为表中的字段添加索引。

    使用alter table语句来为表中的字段添加索引的基本语法是:
    ALTER TABLE <表名> ADD INDEX (<字段>);

    我们来尝试为test中t_name字段添加一个索引。

    mysql> alter table test add index(t_name);
    Query OK, 0 rows affected (0.17 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    执行成功后,我们来看看结果。

    mysql> describe test;
    +------------+-------------+------+-----+---------+-------+
    | Field      | Type        | Null | Key | Default | Extra |
    +------------+-------------+------+-----+---------+-------+
    | t_id       | int(11)     | YES  |     | NULL    |       |
    | t_name     | varchar(50) | NO   | MUL | NULL    |       |
    | t_password | char(32)    | YES  |     | NULL    |       |
    | t_birth    | date        | YES  |     | NULL    |       |
    +------------+-------------+------+-----+---------+-------+
    4 rows in set (0.00 sec)

    结果可以看出,t_name字段的Key这一栏由原来的空白变成了MUL。这个MUL是什么意思呢?简单解释一下:如果Key是MUL,那么该列的值可以重复,该列是一个非唯一索引的前导列(第一列)或者是一个唯一性索引的组成部分但是可以含有空值NULL。










































  • 相关阅读:
    可变参数宏...和__VA_ARGS__
    gitolite
    CentOS 6.4 搭建git 服务器
    github简单使用教程
    【Github教程】史上最全github使用方法:github入门到精通
    redis安装与参数说明
    如何解决redis高并发客户端频繁time out?
    Redis配置文件参数说明
    Redis系列-存储篇hash主要操作函数小结
    Redis常用命令解析——INFO, MONITOR, SLOWLOG
  • 原文地址:https://www.cnblogs.com/qull/p/6581482.html
Copyright © 2011-2022 走看看