mysql优化

2021/9/23 19:41:18

本文主要是介绍mysql优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前记

      在mysql地层中使用的是B+树结构,这种结构有一种好处,可以在三层结构中开源存放超过2000万行数据。也就是说只需要最多进行三次IO就可以满足我们平时百分之99的需求。在此基础下,mysql为我们提供了广大的操作空间,只要优化得当,可以在千万级的表中快速获得我们所需要的数据。在通过一段时间的学习后我总结了以下几条经验:

 

1、查看表结构是否建立索引

      众所周知在数据库查询中,索引的重要性不言而喻。一个良好的数据库索引结构可以使查询相比于不使用索引的情况下快出十几倍甚至几十倍。

  

mysql创建索引命令
使用alter创建普通索引:
ALTER TABLE table_name ADD INDEX index_name(column_list)

 

使用alter创建唯一索引 unique:
ALTER TABLE table_name ADD UNIQUE(column_list)

 

使用alter创建主键索引:
ALTER TABLE table_name ADD PRIMARY KEY(column_list)

 

使用alter创建全文(FUNLLTEXT INDEX)索引:
ALTER TABLE table_name ADD FUNLLTEXT INDEX index_name(col1,col2...)

使用alter创建联合索引:

 

ALTER TABLE table_name ADD INDEX index_name(col1,col2...)

 

删除索引:
DROP INDEX index_name ON table_name

 

2、查看查询语句是否使用到索引

  在使用索引的过程中不仅仅建立了索引即可,还需查看在实际执行sql的时候是否使用到索引。如在联合索引的时候需遵循最左前缀原则,如在一张建立了联合索引 (username,age,sex)的users表中使用以下查询语句

      

1   select * from users where username='pier' and age=12;

2   select * from users where age=12 and sex=0;

3   select * from users where sex=0;

  在上面的三条语句中,只有第一条语句是可以使用到索引的,这是因为在mysql中,使用的B+树结构遵循的是最左前缀原则,在username字段中取首字母比对大小,在以首字母大小进行排序后在进行查找age=12的顺序。因第2和第三不满足最左前缀原则,所以不能使用索引。

 

3、检查查询语句是否查询了不需要的字段

  在查询一张表中,开发人员在项目前期可能为了赶进度,导致写sql时没有太注意sql查询。本来只需要一两个字断的,结果查询了所有字断。这种情况在表字段较少时没什么影响,但如果一个表中有几十个甚至几百个字段时就很影响性能了。于是在处理慢查询时,这也是需要考虑的情况之一。

 

4、数据库长时间的沉淀导致单库单表数据量庞大

  这种情况一般发生在项目上线时间很久之后出现,如果遇到这种情况,就需要考虑分库分表了。

 

在学习的过程中我们总会遇到突发的情况,如何在短时间内快速漂亮去处理这些情况,这需要我们通过不断的学习去积累,不积硅步,无以至千里,加油。

推荐一个可视化学习数据结构的网站:

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html



这篇关于mysql优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程