Mysql索引
设有N条随机记录,不用索引,平均查找N/2次,那么用了索引之后?
Btree索引,Log2N
Hash索引,1
索引与优化之索引的好处与坏处
好处:加快了查询速度
坏处:降低了增删改的速度
增大了表的文件大小(索引文件甚至可能比数据文件还大)
大数据量导入时,应先去掉索引,再导入,最后统一加索引。
索引的使用原则:
不过度索引、索引条件列(where后面最频繁的条件比较适合索引)、索引散列值,过于集中的值不要索引。例如:给性别男女加索引意义不大。
索引类型:普通索引,主键索引,唯一索引,全文索引。
.frm是结构文件
.myd是数据文件
.myi是索引文件
索引文件比数据文件大是一种很常见的事情
1. 普通索引 index 仅仅是加快查询速度
2. 唯一索引 unique index行上的值不能重复
3. 主键索引 primary key不能重复,主键索引必唯一,但是唯一索引不一定是主键,一张表上只能有一个主键,但是可以用一个或者多个索引。
4. 全文索引:fulltext index
查看一张表上的所有索引:
Showindex from 表名;
建立索引:(索引名和索引在哪个列上发挥作用)
Altertable 表名add index/unique/fulltext[索引名](列名);
主键索引有一点区别:
Alter table 表名primary key (列名);
删除索引:
Alter table 表名drop index 索引名;
索引是根据数据建立的目录。
全文索引在mysql的默认情况下,对中文的意义不大。
这么查是一行一行查,效率低。针对每一个单词建立一个索引,
停止词的问题:(一会讲)
停止词是种非常常见的词,是不会加索引的。
关于全文索引的用法:
Match(全文索引名)against(‘keyword’);
关于全文索引的停止词:
全文索引不针对非常频繁的词做索引,如,this,is等
全文索引对中文的意义不大因为英文有空格,标点符号来拆成单词,进而对单词进行索引,而对于中文,没有空格来隔开单词mysql无法识别每个中文词。
存储过程:
类似于函数,就是把一段代码封装起来,当要执行这一段代码时
可以调用该存储过程来实现。
在封装语句体里面,可以用if/else,case,while
等控制结构,可以进行sql编程。
查看现有的存储过程
Show procedure status
删除存储过程
Drop procedure 存储过程的名字
调用存储过程
Call 存储过程的名字();(括号内可以放参数)
第一个存储过程,体会封装sql的用法
第二个存储过程,体会控制结构。
在mysql中,存储过程和函数的区别:
一是名称不同
二是存储过程没有返回值