Mysql索引

行, 表及文件

   每个文件可以划分为数据页(Data page),或简称为页(page);页与业之间有空隙隔开,每个页上面用于存储一行或多个表行,在向表插入数据时Mysql会自动把他存储在最后一页的最后一行之后,如果页已经满了就新建一页。当删除一行时,在删除行的所在页就会留下一个空行,而这个空行Mysql是不会去自动填满的,因为这样会降低插入数据的效率。

   有两个因素决定了在页中实际插入了多少行:页的长度及行的长度,页的  大小取决于操作系统和存储引擎,像2k,4k,8k及16k等。

   操作系统从硬盘读取文件是以页为单位的,所以当从表中查询一行时是把这行所在的也加载到内存,然后再读取这一行,而不是只从硬盘上读取要找的那一行。

 

Mysql索引工作方式

   Mysql有数种方法来访问一个表中的行,我们知道的就有顺序访问和索引访问。顺序访问就是对表逐行扫描,而索引则采 取类似书的目录的方式检索。Mysql支持使用索引的三种算法:第一种是用来查找一个特定的值所出现的行。第二种是通过一个排序的列来浏览整个表或表的一部分,如果必须获取一个列的几个值的话就是用第三种算法。

 

索引有以下特点

  1.当对表进行增,删,改时Mysql会自动更新索引(有可能产生性能消耗);

  2.可以在非唯一性的列上建立索引;

  3.可以再一个表上建立多个索引;

  4.索引也可以在组合列上建立;

  5.索引节点会占用一定的表空间;

 

 创建索引

 1.

 create [<index type>] index <indexName>

 [using {BTREE |HASH}]

 ON <table specification>(<column in index>[,<column in index>]...)

 index type有 UNIQUE,FULLTEXT,SPATIAL.

 

 2. ALTER TABLE ADD INDEX ..

 

 3. 定义表时

 

删除索引

 DROP INDEX indexName ON tableName;

 

索引和主键

 

在一条CREATE TABLE语句中或者使用一条ALTER TABLE语句定义了一个主键或替代主键Mysql会自动创建一个唯一索引。

 

为索引选择列

 

 1.候选键上的唯一索引。

 2.外键上的索引。

 3.包含在选择标准中的列上的索引;

 

 一个索引在使用=,<,<=,>和>=时适用,但是在选择的行数只占表总行数的较小百分比的情况下。

 什么时候选择使用索引取决于几个因素:

 1.条件值在表中的行数,也就是表的可压缩性。

 2.表的行数,表行越多,效果越明显;

 3.一个列中值的分部。

 

 

你可能感兴趣的:(算法,工作,mysql)