最近做了博客关注系统的方案设计,主要的数据表有两个:

数据内容表:

CREATE TABLE `story` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`uid` int(10) unsigned NOT NULL,

`type` tinyint(3) unsigned NOT NULL,

`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

`data` varbinary(8192) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `i_ut` (`uid`,`type`,`time`)

) ENGINE=InnoDB;

以及关注关系表:

CREATE TABLE `attention` (

`uid` int(10) unsigned NOT NULL,

`aid` int(10) unsigned NOT NULL,

`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`uid`,`aid`),

KEY `i_a` (`aid`)

) ENGINE=InnoDB;

我们的要查询出uid为1001的用户A关注的所有人最近发表的内容,结果集大概在10000条,我们只取前20条。

简单直接的查询方法可以是:

select id,data from story,attention

where story.uid=attention.aid and attention.uid=1001 order by time desc,id desc limit 20;

但是这个查询语句效率很低,换用一种貌似比较复杂的查询:

select story.* from

story,

(select id from story,attention

where story.uid=attention.aid and attention.uid=1001 order by time desc,id desc

) relation

where story.id=relation.id limit 20;

这个查询效率就很好了,通过对比发现,至少比上一个查询快几十倍。

我认为这样的差异主要取决于数据库中“查询优化”的实现,可能MySQL在这方面做的有限,需要我们精确的告诉他一个比较优化的查询方案。

觉得文章有用?立即:

和朋友一起 共学习 共进步!

猜想失败,您看看下面的文章有用吗?

mysql查询下个月过生日的说说_查询优化:说说一个数据库的查询方法相关推荐

  1. mysql查询计算机系信息_在学生管理数据库中查询通信系和计算机系的所有教师信息...

    在学生管理数据库中查询通信系和计算机系的所有教师信息 答:select * from 教师 where 系部代码 in(select 系部代码 from 系部 where 系部名称 in('通信系', ...

  2. MySQL中 修改语句使用的关键字是什么_表示修改一个数据库对象的SQL关键字是什么...

    表示修改一个数据库对象的SQL关键字是:ALTER.在数据库中,可以使用"ALTER TABLE"语句来改变原有表的结构,可以在已有的表中添加.删除或修改列. 本教程操作环境:wi ...

  3. mysql分片库分页查询_准备开发一个数据库分片的中间件,请问下分页查询用什么样的算法效率较高?...

    假设你说的用户,不是开发人员,是终端用户,比如saas之类的系统用户. 如果对于用户是透明的,意味着每个用户只需要看到自己的数据,那么比较经济的处理方式是,把用户id的哈希值作为分配的条件,这样能够保 ...

  4. MySQL查询多表定义实体类_自己设计一个 JAVA + MyBatis 解析实体类多表通用查询

    先来处理一下查询的字段和用到的表吧 //虽然我们使用的时候是实体,但最终还是要解析成sql的,那么我们需要想好解析成sql 时候所用到的东东,提前准备好 class TableEntity { Str ...

  5. mysql查询课程最高分_在“成绩管理”数据库中,查询每门课程的最高分,要求得到的信息包括课程名称和分数。正确的命令是( )。 A.SELE_搜题易...

    统计只有2名以下(含2名)学生选修的课程情况,统计结果中的信息包括课程名称.开课院系和选修人数,并按选课人数排序.正确的命令是(  ). A.SELECT 课程名称,开课院系,COUNT(课程编号)A ...

  6. sql server整表查询慢_这里有一个慢 SQL 查询等你来优化

    背景 最近工作上遇到一个"神奇"的问题, 或许对大家有帮助, 因此形成本文. 问题大概是, 我有两个表 TableA, TableB, 其中 TableA 表大概百万行级别(存量业 ...

  7. c语言生日创意代码_跪求一个C语言程序输出“生日快乐”(TC)

    展开全部 #include #include #include #include #include char s[8]; void show1(char *a) { system("cls& ...

  8. mysql根据id删除数据sql语句_删除数据sql-sql数据库删除数据-sql中实现数据删除的语句是...

    怎样用sql语言删除一行数据 在SQL数据库中删除记录一般使用Delete语句,下面就将为您介绍SQL中用于删除记录的DELETE语句的语法 DELETE FROM 表名称 WHERE 列名称 = 值 ...

  9. Mysql存储函数实现增删改查_使用存储过程操作数据库(实现增删改查)

    使用存储过程操作数据库 添加数据: --创建一个存储过程,向表中插入一条数据 create proc usp_insertintoTbClass @className nvarchar(50), @c ...

  10. vb mysql 设置数据源_总结 vb与数据库的连接方法

    总结:vb与数据库连接方式,两种分法. 根据是否使用ODBC(驱动程序)来分: 1.有源连接 2.无源连接. 其中有源连接指的是:通过设置数据源(ODBC)来连接 据我的观察无源连接选择的是oledb ...

最新文章

  1. 网申时遇到“补充信息”这一栏,填还是不填?
  2. MyEclipse显示 Install new software 在线安装插件选项
  3. hbuilder打包ios_ios开发证书的作用及申请步骤
  4. wx5 mysql起不来_mysql(四)—–mysql主从配置-wx5bd1240aa20ac的博客
  5. 20170513 Python练习册0011过滤敏感词
  6. 原生语言开发web版万岳网校源码 v2.2.0
  7. 3.2.1 封装成帧、帧定界、帧同步、透明传输(字符计数法、字符串的首尾填充法、零比特填充的首尾标志法、违规编码法)(转载)
  8. Bellman-Ford 算法及其优化
  9. python做自动化控制postman_Python自动化学习笔记(1)认识接口测试以及postman、Charles工具简单应用...
  10. 使用spire.doc for java为word添加页码、文字水印、书签(去除警告信息)
  11. valgrnd调试详解
  12. 一个小白对接电子面单的哪些坑?
  13. 怎么打开ofd文件的三种方法
  14. JDK1.8版本linux、Windows64下载
  15. 5G有源、无源室分对比
  16. 分组密码设计准则概论
  17. mysql数据库练习作业
  18. Integer最大值2147483647
  19. 志愿模板-大学生寒暑假社会实践报告/企业实习报告模板
  20. 昆仑通态Mcgspro学习笔记(V3.3.6)

热门文章

  1. 一文搞懂HTTP协议(带图文)
  2. 《图解http》读书笔记
  3. 华硕 fx-pro(GL552VW) 修改BIOS,关闭超线程
  4. 分享一款免费在线做图工具:ProcessOn
  5. 西安交大计算机考研分数线2020院线,西安交大考研分数线2020院线_全国硕士研究生招生考试网...
  6. uniapp实现图片压缩:
  7. WIN7共享WIFI上网
  8. postgres 判断null_postgresql基础:null的那些坑
  9. 【MySQL】Deadlock found when trying to get lock; try restarting trans
  10. 公链生态周报:BI指数周涨幅超4%,以太坊POS代码即将完成 | 链塔智库