原始SQL:SELECT * FROM table_name WHERE type='xxx' ORDER BY create_time LIMIT 10000,1000;
直接在mysql中执行:SELECT * FROM table_name WHERE type='xxx' ORDER BY create_time LIMIT 10000,1000;
通过mycat执行:SELECT * FROM table_name WHERE type='xxx' ORDER BY create_time LIMIT 0,11000; #在mysql中真实执行SQL
在分表的情况下,mycat对原始SQL进行了改写,分别到各个实例中执行,然后再对结果进行聚合,排序,返回结果。
坑点:
在分表的情况下,且limit 的开始位置特别大的时候,将需要查询大量的数据,并将各个分表的结果集返回到mycat中,然后在mycat中进行合并和排序,再返回结果。
结果集特别大的情况会查询很慢,且容易导致mycat OOM.
建议:
不要用mycat进行大批量的数据分页查询;通过条件过滤,减小分页前数据量大小;