您的位置:首页 > 数据库 > MySQL

MySql高级优化——索引

2018-01-14 13:34 316 查看
[b]一、索引是什么[/b]
Mysql官方对索引的定义是:索引(Index) 是帮助Mysql高效获取数据的数据结构。

即:索引是数据结构。

数据本身之外,数据库还维护着一个满足特地查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结的基础上实现高级查找算法,这种数据结构就是索引。

一般来说索引本身也很大,不可能全部储存在内存中,因此索引往往以索引文件的形式储存在磁盘上,我们平常所说的索引,若无特别指出,都是指B树(多路搜索树,并不一定是二叉的)结构组织的索引。其中聚焦索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,当然除了B+树这种类型的索引之外,还有哈希索引(hash
index)等。

二、优势和劣势
优势:1. 类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本。
 2. 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。

劣势:1、索引列需占空间。
 2、会降低更新表的速度。
 3、需对大数据量的表进行索引优化。



三、索引分类
1、单值索引(简单索引):即一个索引只包含单个列,一个表中可以有多个单列索引。

方式一: ALTER TABLE 'table_name' ADD INDEX index_name('column')

方式二:CREATE INDEX index_name ON table_name('column')






2、唯一索引:索引列的值必须唯一,但允许有空值。

方式一:ALTER TABLE 'table_name' ADD UNIQUE INDEX `index_name`(column)

方式二:CREATE UNIQUE INDEX 索引名称 ON 表名称(列名称)






3、复合索引:即一个索引包含多个列
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

CREATE UNIQUE INDEX index_name ON `table_name`(`column1`,`column2`)




4、查看和删除索引:

SHOW INDEX FROM `table_name`;


DROP INDEX index_name ON `table_name`;




四、哪些情况需要创建索引



五、哪些情况不需要创建索引



六、常见瓶颈
CPU :  CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据的时候。
IO :磁盘IO瓶颈发生在装入数据远大于内存容量的时候。
服务器硬件的性能瓶颈:top,free,iostart和vmstat来看系统性能状态。

THE END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: