考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
  当前位置:编程开发 > MSSQL > 文章内容
  

MsSql教程:Mysql数据库性能优化二

 [ 2017年7月5日 ] 【

  建立适当的索引

  说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行个正确的'create index',查询速度就可能提高百倍千倍,这可真有诱惑力。可是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的I/O。

  是不是建立一个索引就能解决所有的问题?ename上没有建立索引会怎样?

  ?

1
select * from emp where ename='研发部';

  ---测试案例命令如下 (最好以 select * from emp e,dept d where e.empno=123451 )

  *添加主键

  ?

1
ALTER TABLE emp ADD PRIMARY KEY(empno);

  *删除主键

  ?

1
alter table emp drop primary key;

  索引的原理说明

  没有索引为什么会慢?

  使用索引为什么会快?

  索引的代价

  1、磁盘占用

  2、对dml(update delete insert)语句的效率影响

  btree 方式检索,算法复杂度: log2N 次数

  哪些列上适合添加索引

  1、较频繁的作为查询条件字段应该创建索引

  ?

1
select * from emp where empno = 1;

  2、唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

  ?

1
select * from emp where sex = '男'

  3、更新非常频繁的字段不适合创建索引

  ?

1
select * from emp where logincount = 1

  4、不会出现在WHERE子句中的字段不该创建索引

  索引的类型

  •主键索引,主键自动的为主索引 (类型Primary)

  •唯一索引 (UNIQUE)

  •普通索引 (INDEX)

  •全文索引 (FULLTEXT) [适用于MyISAM] ——》sphinx + 中文分词 coreseek [sphinx 的中文版 ]

  •综合使用=>复合索引

  简述mysql四种索引的区别

  lPRIMARY 索引 =》在主键上自动创建

  lUNIQUE 索引=> 只要是UNiQUE 就是Unique索引.(只能在字段内容不重复的情况下,才能创建唯一索引)

  lINDEX 索引=>就是普通索引

  lFULLTEXT => 只在MYISAM 存储引擎支持, 目的是全文索引,在内容系统中用的多, 在全英文网站用多(英文词独立). 中文数据不常用,意义不大,国内全文索引通常使用 sphinx来完成,全文索引只能在 char varchar text字段创建.

  全文索引案例

  1.创建表

  ?

1
create table news(id int , title varchar(32),con varchar(1024)) engine=MyISAM;

  2.建立全文索引

  ?

1
create fulltext index ful_inx on news (con);

  3.插入数据

  这里要注意,对于常见的英文 fulltext 不会匹配,而且插入的语句本身是正确的.

  ?

1
'but it often happens that they are not above supporting themselves by dishonest means.which should be more disreputable.Cultivate poverty like a garden herb'

  4.看看匹配度

  ?

1
2
3
4
5
6
7
8
9
mysql> select match(con) against('poverty') from news;
+-------------------------------+
| match(con) against('poverty') |
+-------------------------------+
| 0 |
| 0 |
| 0 |
| 0.9853024482727051 |
+------------------------------+

  0表示没有匹配到,或者你的词是停止词,是不会建立索引的.

  使用全文索引,不能使用like语句,这样就不会使用到全文索引了.

  复合索引

  ?

1
create index 索引名 on 表名(列1,列2);

  索引的使用

  建立索引

  ?

1
2
3
create [UNIQUE|FULLTEXT] index index_name on tbl_name (col_name [(length)] [ASC | DESC] , …..);
alter table table_name ADD INDEX [index_name] (index_col_name,...)
添加主键(索引) ALTER TABLE 表名 ADD PRIMARY KEY(列名,..); 联合主键

  删除索引

  ?

1
2
3
DROP INDEX index_name ON tbl_name;
alter table table_name drop index index_name;
删除主键(索引)比较特别: alter table t_b drop primary key;

  查询索引(均可)

  ?

1
2
3
show index(es) from table_name;
show keys from table_name;
desc table_Name;

  修改索引,我们一般是先删除在重新创建.

  查询要使用索引最重要的条件是查询条件中需要使用索引。

  下列几种情况下有可能使用到索引:

  1,对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。

  2,对于使用like的查询,查询如果是 'ªa' 不会使用到索引, 'aaa%' 会使用到索引。

  下列的表将不使用索引:

  1,如果条件中有or,即使其中有条件带索引也不会使用。

  2,对于多列索引,不是使用的第一部分,则不会使用索引。

  3,like查询是以%开头

首页 1 2 3 尾页
本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2007-2013 中华考试网(Examw.com) All Rights Reserved