当前位置:Gxlcms > 数据库问题 > mysql优化

mysql优化

时间:2021-07-01 10:21:17 帮助过:19人阅读

 

当remark传入int类型的值后,查询时间0.14秒,传入字符类型后只需要0.005秒。

SQL优化--函数计算

基本原则:不在索引列进行数学运算和函数运算。

索引字段进行数学运算时,不走索引。可以放到后面对值进行运算。

例如:

技术图片

通过运行时间就可以看出效果。

索引字段慎用函数运算,MySQL的优化器对函数运算识别不出来时会直接走全表扫描。

例子如下:

技术图片

SQL优化--分页

传统分页

select * from table limt 10000,10;

LIMIT原理

limit 10000,10; 偏移量越大则越慢。查询的时候要一步一步遍历到第10010条记录,然后取后10条记录,前面的全部抛弃掉。

推荐分页SQL

select * from table where id>=23424 limit 11;

#10+1(每页10条)

select * from table where id>23434 limit 11;

分页方式二

select * from table where id>=(select id from table limit 10000,1) limit 10;

分页方式三

select * from table where Inner join (select id from table limit 10000,10) using (id);

分页方式四

先取idselect id from table limit 10000,10;
select * from table where id in (123,456,...);

具体示例:

技术图片
MySQL> select sql_no_ cache * from post limit 10,10;10 row in set (0.01 sec)

MySQL> select sql_ no_cache *  from post limit 2000,10;10 row in set (0.13 sec)

MySQL> select sql_no_cache  *  from post limit 80000,10;10 rows in set (0.58 sec)

MySQL> select sql_no_ cache id from post limit 8000,10;10 rows in set (0.02 sec)

MySQL> select sql_no_ cache * from post WHERE id> = 323423 limit 10;10 rows in set (0.01 sec)

MySQL> select * from post WHERE id >= ( select sql_ no_ cache id from post limit8000,1 ) limit 10;10 rows in set (0.02 sec)
技术图片

可扩展性设计

业务隔离

不同的业务使用不同的数据库实例

技术图片

垂直拆分

不同的业务表拆分到不同的数据库中,可以根据不同的模块,不同的功能将表拆分到不同个数据库中。逻辑比较清晰,但是也要考虑到具体的情况,如果有关联查询时,两个表放在里不同的库中,这样就拆分的不合理了,所以拆分的时候要对业务做深入的了解。

技术图片

水平拆分

一个表中的数据拆分到不同表中或不同的库中。但是拆分的时候要慎重的考虑好了,要以哪个键作为唯一标识进行拆分。一但确定下来最好不要随意更改。

技术图片

终极--数据拆分

水平拆分+垂直拆分

(如果对分布式事务要求不太高的可以使用WTable,底层也是做了拆分。聚合操作也比较麻烦,要对每个库进行请求,然后再进行聚合操作。)

技术图片

总结

这次的知识总结的比较粗糙,以后会对每一块做深入研究。

mysql优化

标签:自己   理解   传统   学习   信息   分页   类型   dml   lob   

人气教程排行