每日分享
You raise me up,so I can stand on mountains .You raise me up,to walk on stormy seas.
你激励了我故我能立足于群山之巅。你鼓舞了我,故我能行进于暴风雨的洋面。
小闫语录:
激励能激发一个人的潜力,激励能抚慰一颗受伤的心,激励能鼓起失去的勇气。所以,正在看这篇文章的你,请开心每一天。得不到的是配不上你的,即将得到的一定是更好的。
MySQL数据库索引
数据库索引是什么大家应该都已经知道。为什么建立索引,大家应该张口就来。算了,我还是简简单单的说一下吧:
数据库索引可以理解为数据库中一种排序的数据结构。它的存在就是为了协助快速查询、更新数据库表中的数据。优化查询效率。(简直和废话一样,谁不知道索引就像新华字典前面的音节索引和部首检字表一样......)
那么索引的原理呢?什么时候创建索引呢?索引有哪些呢?这些你想过吗?不知道就对了,我也不知道(会不会被打死....)。
MySQL中的索引用到了B+树、哈希桶等索引数据结构,但是主流还是B+树。那么为什么B+树适合做数据库索引呢?
1.B+树使得IO读写次数变少。
B+树的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对于B树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。
2.B+树查询效率稳定。
搜索任何一个关键字,所走的路径长度是一样的,也就是说查每一个数据的效率相同。
3.B+树只需要遍历叶子节点(也就是最底层没有子节点的节点)就可以达到遍历整棵树的目的,这也解决了数据库的范围查询问题,而B数是不支持这样的操作的。
什么时候建立索引,什么时候少建或者不建索引呢?
1.表记录太少的话,不要建立索引了,因为建立索引表会增加查询的步骤,处理变慢;
2.经常插入、删除、修改的表尽量少的建立索引,因为索引表的维护也会降低性能;
3.对于那些数据都是重复且分布平均的字段,比如一个字段只有True和False两种数据,但是记录超多(假设100万行),这样建立索引是提高不了查询速度的;
4.不要将超多的字段建立在一个索引里,它会增加数据修改、插入和删除的时间的。
5.对于百万、千万级的数据库建立索引,相信我,它会有质的飞跃。
6.对于不会出现在where条件中的字段不要建立索引,不要再增加索引表的体积了。
1. 创建索引的语句
1.1 ALTER TABLE
1.创建普通的索引
alter table <table_name> add index <index_name> (`字段名`);
2.创建多个索引
alter table <table_name> add index <index_name> (`column`,`column1`,`column_N`.......);
索引名index_name是一个可选项,未指定时,MySQL将根据第一个索引列赋一个名称。
3.创建主键索引
alter table <table_name> add primary key (`字段名`);
4.创建唯一索引
alter table <table_name> add unique (`字段名`);
5.创建全文的索引
alter table <table_name> add fulltext (`字段名`);
1.2 CREATE INDEX
1.增加普通索引
create index <index_name> on table_name (`字段名`)
2.增加UNIQUE索引
create unique index <index_name> on <table_name> (`字段名`)
CREATE INDEX中索引名必须指定,而且只能增加普通索引和UNIQUE索引,不能增加PRIMARY KEY索引。
2. 删除索引
drop index <index_name> on <table_name>; alter table <table_name> drop index <index_name>; alter table <table_name> drop primary key;