时间:2021-07-01 10:21:17 帮助过:19人阅读
当remark传入int类型的值后,查询时间0.14秒,传入字符类型后只需要0.005秒。
基本原则:不在索引列进行数学运算和函数运算。
索引字段进行数学运算时,不走索引。可以放到后面对值进行运算。
例如:
通过运行时间就可以看出效果。
索引字段慎用函数运算,MySQL的优化器对函数运算识别不出来时会直接走全表扫描。
例子如下:
select * from table limt 10000,10;
limit 10000,10; 偏移量越大则越慢。查询的时候要一步一步遍历到第10010条记录,然后取后10条记录,前面的全部抛弃掉。
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);
分页方式四
先取id:select 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