从一个表中选择数据并将另一个表连接为主“键”是相当缓慢的

Sledmore

我有两个表,客户端将使用用户名进行搜索,该用户名将在用户表中搜索记录和用户ID,然后在rooms表中搜索并返回结果,但是我的当前代码似乎很慢。

我的房间表中有大约750,000条记录,而用户表中有大约550,000条记录,因此我的搜索结果通常需要5到7秒的时间才能显示回客户端,下面是否可以替代我的代码?

SELECT
    `rooms`.`id`,
    `rooms`.`caption`,
    `rooms`.`description`,
    `rooms`.`roomtype`,
    `rooms`.`owner`,
    `rooms`.`state`,
    `rooms`.`category`,
    `rooms`.`users_now`,
    `rooms`.`users_max`,
    `rooms`.`model_name`,
    `rooms`.`score`,
    `rooms`.`allow_pets`,
    `rooms`.`allow_pets_eat`,
    `rooms`.`room_blocking_disabled`,
    `rooms`.`allow_hidewall`,
    `rooms`.`password`,
    `rooms`.`wallpaper`,
    `rooms`.`floor`,
    `rooms`.`landscape`,
    `rooms`.`floorthick`,
    `rooms`.`wallthick`,
    `rooms`.`mute_settings`,
    `rooms`.`kick_settings`,
    `rooms`.`ban_settings`,
    `rooms`.`chat_mode`,
    `rooms`.`chat_speed`,
    `rooms`.`chat_size`,
    `rooms`.`trade_settings`,
    `rooms`.`group_id`,
    `rooms`.`tags`,
    `rooms`.`push_enabled`,
    `rooms`.`pull_enabled`,
    `rooms`.`enables_enabled`,
    `rooms`.`respect_notifications_enabled`
FROM
    `rooms`
JOIN `users` ON `users`.`id` = `rooms`.`owner`
WHERE
    `users`.`username` = 'query'
ORDER BY
    `rooms`.`users_now` DESC
LIMIT 50

说明计划:

1   SIMPLE  users   const   PRIMARY,id,username username    128 const   1   Using index
1   SIMPLE  rooms   index   owner   users_now   4       50  Using where

我已经为适当的列建立了索引,但似乎仍然得到缓慢的结果。谢谢!

缎面骑士

如我所见,您的结果基于users表,但应包含来自rooms表的数据。您可以通过两个查询而不是一个查询立即获得结果。首先获取您的users.id,然后获取结果并在rooms表中搜索匹配的所有者。

select users.id from users where username='search'

现在,使用刚得到的users.id数组在您的房间中运行一个全新的查询。ForEach代码取决于您使用的脚本语言。

尽管我承认这会为您的脚本付出更多的努力,但它肯定会立即加快您的速度。如果您的用户结果具有多个记录(即:如果将返回多个“ users.id”记录,则通过比较,此方法仍将很简单)仍然可以使用。如果有多个记录,则可以构造一个看起来像这样的数组,以允许单个查询获取所有房间:

select * from rooms where owner in ('id1','id2','id3')

另一种方法是:

select * from rooms where owner in (select users.id from users where username='search')

这种方法比较简单,看起来很便宜,但是效果很好。它将不返回用户数据,仅返回房间数据。第一种方法将允许您在第一个查询上捕获用户数据,并在第二个查询上捕获房间数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从一个表中选择数据并为主“键”连接另一个表相当慢

来自分类Dev

从一个或另一个表中选择数据的最佳方法

来自分类Dev

从一个表中选择数据,从另一个表中选择条件

来自分类Dev

如何从一个表中选择另一个表中没有外键的记录

来自分类Dev

从一个表中选择另一个不存在的表

来自分类Dev

从一个表中选择,从另一个表中计数

来自分类Dev

根据另一个表的频率从一个表中选择列?

来自分类Dev

如何从一个表中选择数据并将其插入到带有新列的另一个表中

来自分类Dev

如何从一个表中选择数据并插入另一个表中?

来自分类Dev

当能力在另一个表中时,如何从一个表中选择数据?

来自分类Dev

如何从一个表中选择数据并插入另一个表中?

来自分类Dev

根据另一个表中的选定行从一个表中选择数据

来自分类Dev

从另一个表中选择数据

来自分类Dev

将数据从一个表连接到另一个表

来自分类Dev

Oracle SQL从一个表中选择与另一个表相关的数据

来自分类Dev

PHP MySQL从一个表中选择ID,从另一个表中选择照片

来自分类Dev

SQL从一个表中选择项目,从另一个表中选择条件

来自分类Dev

从一个表中选择所有列,从另一个表中选择 1 列

来自分类Dev

从一个表中选择与另一个表没有关系的表

来自分类Dev

无法从另一个连接表中选择数据

来自分类Dev

从一个表中选择数据,然后插入到该表中不存在的另一个现有表中

来自分类Dev

从一个表中选择记录,而另一个表中没有两列

来自分类Dev

根据另一个表中的引用值从一个表中选择值

来自分类常见问题

从一个表中选择用户标识,然后在另一个表中更新

来自分类Dev

MySQL:如何从一个表中选择从另一个表获取的每个间隔之间的行

来自分类Dev

SQL查询以基于另一个表中的列值从一个表中选择

来自分类Dev

根据另一个表中的关键字从一个表中选择行

来自分类Dev

MySQL查询-从一个表中选择,从另一个表中计数

来自分类Dev

SQL查询-从一个表中选择全部,在另一个表中匹配记录

Related 相关文章

  1. 1

    从一个表中选择数据并为主“键”连接另一个表相当慢

  2. 2

    从一个或另一个表中选择数据的最佳方法

  3. 3

    从一个表中选择数据,从另一个表中选择条件

  4. 4

    如何从一个表中选择另一个表中没有外键的记录

  5. 5

    从一个表中选择另一个不存在的表

  6. 6

    从一个表中选择,从另一个表中计数

  7. 7

    根据另一个表的频率从一个表中选择列?

  8. 8

    如何从一个表中选择数据并将其插入到带有新列的另一个表中

  9. 9

    如何从一个表中选择数据并插入另一个表中?

  10. 10

    当能力在另一个表中时,如何从一个表中选择数据?

  11. 11

    如何从一个表中选择数据并插入另一个表中?

  12. 12

    根据另一个表中的选定行从一个表中选择数据

  13. 13

    从另一个表中选择数据

  14. 14

    将数据从一个表连接到另一个表

  15. 15

    Oracle SQL从一个表中选择与另一个表相关的数据

  16. 16

    PHP MySQL从一个表中选择ID,从另一个表中选择照片

  17. 17

    SQL从一个表中选择项目,从另一个表中选择条件

  18. 18

    从一个表中选择所有列,从另一个表中选择 1 列

  19. 19

    从一个表中选择与另一个表没有关系的表

  20. 20

    无法从另一个连接表中选择数据

  21. 21

    从一个表中选择数据,然后插入到该表中不存在的另一个现有表中

  22. 22

    从一个表中选择记录,而另一个表中没有两列

  23. 23

    根据另一个表中的引用值从一个表中选择值

  24. 24

    从一个表中选择用户标识,然后在另一个表中更新

  25. 25

    MySQL:如何从一个表中选择从另一个表获取的每个间隔之间的行

  26. 26

    SQL查询以基于另一个表中的列值从一个表中选择

  27. 27

    根据另一个表中的关键字从一个表中选择行

  28. 28

    MySQL查询-从一个表中选择,从另一个表中计数

  29. 29

    SQL查询-从一个表中选择全部,在另一个表中匹配记录

热门标签

归档