my.ini参数修改了下 Java代码 table_cache=512 bulk_insert_buffer_size = 100M innodb_additional_mem_pool_size=30M innodb_flus ...
my.ini参数修改了下
Java代码
- table_cache=512
- bulk_insert_buffer_size = 100M
- innodb_additional_mem_pool_size=30M
- innodb_flush_log_at_trx_commit=0
- innodb_buffer_pool_size=207M
- innodb_log_file_size=128M
大表查询总结: 1 复合索引好好使用 2 in 要好好使用
上面的都是传统分页的,分页做下改进
1 当页面传到controller层有一个page对象,代表要查询的页数,那么我们的sql可以随着变化
start=(page-1)*pagesize+1 然后是where做限制 就是where加上 id >= start
如果表中增加了一个type='ios8' 因为ios8 的数据是从三千多万多条开始的,假设是32888888条记录,后面才增加type='ios8'的记录,那么分页就可以加上 id >= start + 32888888
2 对于新闻类,老的数据分页是固定的,所以可以分表,新闻就要新闻
所以最新的新闻的分页好办,表里面弄几百页就够了,其他的数据放到一个老数据表里面,老数据表的存储引擎改成MyISAM
比如前500页就查询news的数据,后面的就查询oldnews1,oldnews2.....表的数据,对old表做一下策略每个old表的一种分类只允许有100000页的数据。
假设oldnew1表,是数据里面最先入进去的,是知道id的范围的,但是oldnews1表分页的页数是会变的
我们在老数据表每个表里面都增加一个page字段,存储页数,由于页数是会变动的,所以我们需要页码字段和数据倒着来,那么插入的时候就不会改动前面的页码的,我们知道有多少个老表。假设有10个老表
limit a,b,那么a就会大于 (news表的总页数*pagesize-news表的总条数+ 9*100000*pagesize),查询页码的时候就需要-100000+1,因为页码字段是倒着来的.
3 上面分表+页码策略做的话性能会明显的提升很多,但是表中有大字段而且字段超多始终会对性能产生影响,老新闻是不变的,可以做静态化处理,我们新增一个路径表urloldnew1,.....,只给一个id,page,url即可,查询的时候就用这样就可以让表的数据字段大大减少,不去查询老的原始数据表。
url是生成的静态文件地址,这需要静态化的时候进行二次加密,根据文件路径生成 加密码,然后根据加密码生成静态路径。
4 下面对单条新闻设计。
查询单条新闻:
这是经过加密的,后台要解密前台传递过来的字符串
如jkser896 _ 89hhgii _ oiy67hjk
根据字段表再次解密 java开发者 _ /news/old8/ 1243546678
这样拼接路径就成了。
最后把java插入测试数据放到附件里
获取【下载地址】 java后台框架源码 springmvc mybatis
原标题:mysql 3200万数据,优化分页查询
关键词:MYSQL
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。