1. 千万级Mysql数据库查询优化可以使用limit方法
Mysql数据库中一个表里有一千多万条数据,怎么快速的查出第900万条后的100条数据
1. id>=的(子查询)形式实现
select * from test where id >= (select id from test limit 9000000,1)limit 0,100
2,使用join的形式;
SELECT * FROM test a JOIN (SELECT id FROM test LIMIT 9000000,100) b ON a.id = b.id
2.Mysql复杂查询语句的优化,你会怎么做?
说到复杂SQL优化,最多的是由于多表关联造成了大量的复杂的SQL语句,那我们拿到这种sql到底该怎么优化呢,实际优化也是有套路的,只要按照套路执行就行。复杂SQL优化方案:
- 使用EXPLAIN关键词检查SQL。EXPLAIN可以帮你分析你的查询语句或是表结构的性能瓶颈,就得EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索和排序的,是否有全表扫描等;
- 查询的条件尽量使用索引字段,如某一个表有多个条件,就尽量使用复合索引查询,复合索引使用要注意字段的先后顺序。
- 多表关联尽量用join,减少子查询的使用。表的关联字段如果能用主键就用主键,也就是尽可能的使用索引字段。如果关联字段不是索引字段可以根据情况考虑添加索引。
- 尽量使用limit进行分页批量查询,不要一次全部获取。
- 绝对避免select *的使用,尽量select具体需要的字段,减少不必要字段的查询;
- 尽量将or 转换为 union all。
- 尽量避免使用is null或is not null。
- 要注意like的使用,前模糊和全模糊不会走索引。
- Where后的查询字段尽量减少使用函数,因为函数会造成索引失效。
- 避免使用不等于(!=),因为它不会使用索引。
- 用exists代替in,not exists代替not in,效率会更好;
- 避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤,这个处理需要排序,总计等操作。如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。
- 千万不要 ORDER BY RAND()