引言
在实际项目中,虽然我们开发出了系统,但是这还远远不够的,后期系统的优化、性能的提升、提高系统的安全。这些都是项目开发中需要经历的阶段,现在我主要谈谈mysql数据库的优化技巧。
常用优化技巧
1、数据表结构的设计,需符合3NF
2、添加适当的索引
3、给数据库表结构使用分表技术
4、读写分离
5、根据实际情况使用一些存储过程
6、对mysql进行一定的配置
7、提高mysql的服务器配置
8、碎片整理
以上就是一个项目中mysql常用的优化技巧,但是因为工作环境的约束,我也才实际使用过以上的 1、2、3、6、7、8点,读写分离和存储过程还没有机会接触过,感觉还是挺可惜的。。。。
接下来我讲的就是实际项目常用的索引技术:
索引技术是以占用磁盘、对增删改 影响的代价来换取查询速率的提升的。
常见索引
1、主键索引
2、普通索引
3、唯一索引
4、全文索引
以下是我建立的数据表结构
查看当前表的索引,可使用命令:
show indexes from 表名(\G)
主键索引
<strong>Table</strong> :表的名称。
<strong>Non_unique</strong>:如果索引不能包括重复词,则为0。如果可以,则为1。
<strong>Key_name</strong>:索引的名称。
<strong>Seq_in_index</strong>:索引中的列序列号,从1开始。
<strong>Column_name</strong>:列名称。
<strong>Collation</strong>:列以什么方式存储在索引中。在MySQLSHOW INDEX语法中,有值’A’(升序)或NULL(无分类)。
<strong>Cardinality</strong>:索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。
<strong>Sub_part</strong>:如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
<strong>Packed</strong>:指示关键字如何被压缩。如果没有被压缩,则为NULL。
<strong>Null</strong>:如果列含有NULL,则含有YES。如果没有,则为空。
<strong>Index_type</strong>:存储索引数据结构方法(BTREE, FULLTEXT, HASH, RTREE)
可看到key_name的名称是PRIMARY,这个就是主键索引:
当你指定某个字段为主键的时候,那么那个字段就默认为主键索引了
唯一索引
现在我给status指定唯一键,如下
再查看下索引:
它和主键索引一样,当你指定为唯一键的时候,也默认就指定了唯一索引
普通索引
给某个普通字段,添加索引,就叫做普通索引
命令: create index 索引名 on 表(字段名)
这时再看下索引
此时这个flag字段,被指定成了普通索引
全文索引
全文索引其实就像它的名字一样,主要针对文件和文本的搜索,并且只对MyISAM 存储引擎有效
需使用fulltext创建,如下创建全文索引:
可以看到已经有两个字段,都建立了索引了
索引的删除
alter table 表名 drop index 索引名
如果删除主键索引
alter table 表名 drop primary key
索引的使用
比如 使用flag为条件进行查询时,
select * from where flag=1;
这就可以使用到flag这个字段的普通索引了
不过全文索引的使用比较特殊,如下使用:
select * from article where match(索引字段名) against(内容)
以上就是我对索引的一些总结,如有错误,还望指正