引言

在实际项目中,虽然我们开发出了系统,但是这还远远不够的,后期系统的优化、性能的提升、提高系统的安全。这些都是项目开发中需要经历的阶段,现在我主要谈谈mysql数据库的优化技巧。

常用优化技巧

1、数据表结构的设计,需符合3NF

2、添加适当的索引

3、给数据库表结构使用分表技术

4、读写分离

5、根据实际情况使用一些存储过程

6、对mysql进行一定的配置

7、提高mysql的服务器配置

8、碎片整理

以上就是一个项目中mysql常用的优化技巧,但是因为工作环境的约束,我也才实际使用过以上的 1、2、3、6、7、8点,读写分离和存储过程还没有机会接触过,感觉还是挺可惜的。。。。

接下来我讲的就是实际项目常用的索引技术:

索引技术是以占用磁盘、对增删改 影响的代价来换取查询速率的提升的。

常见索引

1、主键索引

2、普通索引

3、唯一索引

4、全文索引

以下是我建立的数据表结构

Paste_Image.png

查看当前表的索引,可使用命令:

show indexes from 表名(\G)

主键索引

Paste_Image.png

Table :表的名称。

Non_unique:如果索引不能包括重复词,则为0。如果可以,则为1。

Key_name:索引的名称。

Seq_in_index:索引中的列序列号,从1开始。

Column_name:列名称。

Collation:列以什么方式存储在索引中。在MySQLSHOW INDEX语法中,有值’A’(升序)或NULL(无分类)。

Cardinality:索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。

Sub_part:如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。

Packed:指示关键字如何被压缩。如果没有被压缩,则为NULL。

Null:如果列含有NULL,则含有YES。如果没有,则为空。

Index_type:存储索引数据结构方法(BTREE, FULLTEXT, HASH, RTREE)

可看到key_name的名称是PRIMARY,这个就是主键索引:

当你指定某个字段为主键的时候,那么那个字段就默认为主键索引了

唯一索引

现在我给status指定唯一键,如下

Paste_Image.png

再查看下索引:

Paste_Image.png

它和主键索引一样,当你指定为唯一键的时候,也默认就指定了唯一索引

普通索引

给某个普通字段,添加索引,就叫做普通索引

命令: create index 索引名 on 表(字段名)

Paste_Image.png

这时再看下索引

Paste_Image.png

此时这个flag字段,被指定成了普通索引

全文索引

全文索引其实就像它的名字一样,主要针对文件和文本的搜索,并且只对MyISAM 存储引擎有效

需使用fulltext创建,如下创建全文索引:

Paste_Image.png

可以看到已经有两个字段,都建立了索引了

Paste_Image.png

索引的删除

alter table 表名 drop index 索引名

如果删除主键索引

alter table 表名 drop primary key

索引的使用

比如 使用flag为条件进行查询时,

select * from where flag=1;

这就可以使用到flag这个字段的普通索引了

不过全文索引的使用比较特殊,如下使用:

select * from article where match(索引字段名) against(内容)

Paste_Image.png

以上就是我对索引的一些总结,如有错误,还望指正