1. 日志信息不够丰富,怎么破
在日志分析场景中,我们经常遇到这样的问题,日志中的信息不完善。例如,日志中包含了用户的点击行为,但是却缺少用户的属性,例如注册信息、资金、道具等信息。
而产品PD、运营同学分析日志的时候,往往需要这种联合分析用户的属性和行为,例如分析用户地域对付费习惯的影响。
【OSS】 【mysql】 【SQL】 【日志】 【SLS】 …
很多公司都禁止程序员在 SQL 中使用 JOIN,至于原因则出奇的一致:用 JOIN 慢。不过我从没见过谁来论证为什么用 JOIN 慢,结果这个人云亦云的结论越传越广,让我觉得是时候来讨论一下这个看似正确的结论了。
举个例子:查询最新的十篇帖子和对应的用户信息,用 JOIN 是这样的:
SELECT posts.id, posts.content, users.name, ... FROM posts JOIN users on posts.user_id = users.id ORDER BY posts.created_at DESC LIMIT 10
如果不使用 JOIN 的话,那么大概会改写成如下两条 SQL:
SELECT id, content, ... FROM posts ORDER BY created_at DESC LIMIT 10 SELECT name, ... FROM users WHERE id in (...)
第一次查询得到帖子数据,然后在程序代码里收集好想要的 user_id,第二次查询通过 user_id …
[获取更多]
众所周知,在MySQL中,如果直接 ORDER BY RAND() 的话,效率非常差,因为会多次执行。事实上,如果等值查询也是用
RAND() 的话也如此,我们先来看看下面这几个SQL的不同执行计划和执行耗时。
首先,看下建表DDL,这是一个没有显式自增主键的InnoDB表:
[yejr@imysql]> show create table t_innodb_random\G *************************** 1. row *************************** Table: t_innodb_random Create Table: CREATE TABLE `t_innodb_random` ( `id` int(10) unsigned NOT NULL, `user` varchar(64) NOT NULL DEFAULT '', KEY `idx_id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
往这个表里灌入一些测试数据,至少10万以上, id 字段也是乱序的。
[yejr@imysql]> select count(*) from t_innodb_random\G *************************** 1. row *************************** count(*): 393216
1、常量等值检索:
…[获取更多]
本PPT,简单介绍了MySQL的查询优化,重点在范围查询优化,包括:代价模型;全表扫描代价计算;索引范围扫描代价计算;统计信息;统计信息收集策略;以及MySQL针对查询优化模块的一些优化。希望对MySQL查询优化有所了解的朋友,建议一看! 考虑到本PPT中,目前主要涉及的内容是MySQL的范围查询优化,因此后续本人会对此PPT进行内容优化与扩展,优化已有的内容,新增Join查询优化,以及Oracle查询优化实现的部分对比。新的PPT,将在本人组织的 #数据库内核分享# 的第三期,或者是第四期中交流,敬请期待! 注1:考虑到slideshare长期被墙,本PPT的微盘地址为:微盘下载