引言
在实际项目中,虽然我们开发出了系统,但是这还远远不够的,后期系统的优化、性能的提升、提高系统的安全。这些都是项目开发中需要经历的阶段,现在我主要谈谈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
以上就是我对索引的一些总结,如有错误,还望指正