- A+
显示不全请点击全屏阅读
很久没写文章,是不是想着写点什么东西,分享下我的数据库设计思路,主要是针对单机数十亿及以上数据查询优化技巧。
只需要用mysql在本机笔记本搭建一个普通的环境就行。
除了这些优化,我优化的核心设计思想是在建立索引和查询代码上面。
很多人在设计社工库的时候,都是把所有要查询的字段都建立索引,而对于数据库来说,查询的数据库数据量越小,那么查询速度越快,另外索引也比较占空间,所以我们在索引上面做做动作,可以节省大量硬盘空间和优化查询速度。
我的做法是只查可能有我想要的数据的表,肯定没有我想要的数据表直接不查询,我不需要查询的字段就不需要建索引,那这样就可以实现一来我查询的量小了,而来少给很多字段建立索引。
举个简单的例子,比如你现有的数据库info中两个表:
3.B表email字段不为空,A表email字段为空。
3.B表email字段建立索引,A表email字段不建立索引且默认为空。
OK,那么表设计就完成了。
那么我们就可以利用这种表设计减少我们查询的量来优化查询速度。
比如我要查询info库里面邮箱为[email protected]的信息。那么这个查询中我会丢掉A表,因为A表email字段为空,肯定没有我要查询的[email protected]信息。
那么如何过滤掉A表。一条SQL语句即可:
SELECT TABLE_NAME FROM information_schema.statistics WHERE INDEX_NAME!=’PRIMARY’ and table_schema = ‘info’ and COLUMN_NAME=’email’ GROUP BY TABLE_NAME;
利用这条语句,就可以输出info库email字段存在索引的表。然后利用脚本动态拼接union查询语句查询即可。
我的环境是USB3.0 2TB移动硬盘,笔记本win7 i7-4700,8G内存。20亿数据查询速度在1~3秒。
Tags:
如果您喜欢我的博客,欢迎点击图片定订阅到邮箱 也可以点击链接【订阅到鲜果】
如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡