V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
shendaowu
V2EX  ›  MySQL

如何防止大量耗时的数据库查询影响网页加载速度?

  •  
  •   shendaowu · 2023-01-11 20:07:11 +08:00 · 3817 次点击
    这是一个创建于 669 天前的主题,其中的信息可能已经有所发展或是发生改变。

    耗时的数据库查询应该是没有优化的可能。而且可能会执行很多这种查询,甚至可能需要排队执行这种查询。直接买两台服务器是否最彻底?有现成的解决方案吗?

    数据库查询影响网页加载速度我听说有这么回事,如果不会的话欢迎指出来。

    第 1 条附言  ·  2023-01-12 19:25:04 +08:00
    我说的那些消耗资源的 SQL 语句基本类似标签搜索,但是每次搜索会搜索哪些对象具有给定的很多个的标签,多的时候可能会有几十个标签吧。另外按标签匹配的个数进行排序。我用的基本上就是这个问题题主采纳的回答里的语句: https://stackoverflow.com/questions/8762333/multiple-tags-search-query 。不知道这种查询是否能优化。我还没学数据库优化。我之前生成一些随机的数据进行测试好像是搜一百个标签的时候在我的 SSD 电脑上搜索时间达到秒级了。好像还建索引了。另外我的那些随机数据应该是有一些问题的,跟实际的数据很可能有区别,不知道实际数据是会更快还是更慢。

    两台服务器的作用是一台处理普通的 IO 消耗不大的显示一般网页的任务,一台服务器处理上一段说的那种查询。我猜物理隔离开那种资源消耗大的查询它应该就不会跟处理显示一般网页的数据库查询抢资源了。

    大家多担待一下。我之前以为两台服务器的操作很好理解,现在看来是我想错了。
    21 条回复    2023-01-15 22:08:20 +08:00
    CEBBCAT
        1
    CEBBCAT  
       2023-01-11 20:30:55 +08:00   ❤️ 4
    建议学习《提问的智慧》。功能是什么样子需要介绍一下。买两台服务器和问题解决之间是什么关系?网友该怎么判……算了,你自己想想吧

    一般场景推荐即时返回页面,如果后台程序没完成就提示用户稍后刷新。这个页面只做结果查询作用。
    Red998
        2
    Red998  
       2023-01-11 21:12:56 +08:00
    不要求实时数据、可以考虑使用缓存+异步处理查询之类的。但这个也只是治标不治本。根本问题还是查询耗时需要优化。
    h0099
        3
    h0099  
       2023-01-11 21:26:42 +08:00
    IvanLi127
        4
    IvanLi127  
       2023-01-12 01:00:05 +08:00 via Android
    直接禁止非可控的方式调用耗时查询就能彻底解决这个问题。加预载,缓存什么的都可以。搞出来了就下一阶段能靠加机子解决了。
    jones2000
        5
    jones2000  
       2023-01-12 01:30:32 +08:00
    升级数据库机器的配置, 内存,CPU ,硬盘等等升级,可以提高速度的。
    em70
        6
    em70  
       2023-01-12 02:02:35 +08:00
    先分析一下瓶颈在哪里,硬盘 IO 高,还是 CPU 高,还是内存不够,如果硬件没问题,那就是表设计和 SQL 语句问题,是否创建了合适的索引,是否锁表
    Jooooooooo
        7
    Jooooooooo  
       2023-01-12 02:09:03 +08:00   ❤️ 5
    先问: 网页的加载为什么要依赖数据库呢?
    loading
        8
    loading  
       2023-01-12 07:35:40 +08:00 via Android
    用 ajax 方式,不要整个页面一下查完才返回 html
    buyan3303
        9
    buyan3303  
       2023-01-12 08:15:56 +08:00
    @Jooooooooo #7 可能是 SELECT * FORM 然后前端一股脑的存了大量数据,显示的时候,显示部分内容 2333
    unt
        10
    unt  
       2023-01-12 08:49:04 +08:00
    嗯,没问清楚诶,有点奇怪。 你是想问数据库还是想问前端。问数据的库
    unt
        11
    unt  
       2023-01-12 08:58:53 +08:00
    问数据库的话,只要问查询耗时长怎么解决就可以了, 小数据量的话优化代码;大数据量的话优化逻辑+加强硬件+优化代码;

    问前端的话,大部分耗时长是后端的问题,和你没关系,本就是异步的,你无非就是加 loading 优化,骨架屏等优化用户体验,其他的基本上可以归结为软件设计有问题。
    bjzhush
        12
    bjzhush  
       2023-01-12 09:27:31 +08:00
    有个东西叫索引,还有个东西叫 redis
    Huelse
        13
    Huelse  
       2023-01-12 09:48:28 +08:00
    不知道你说的是网页需要异步加载问题还是单纯的 sql 查询慢问题?
    xuanbg
        14
    xuanbg  
       2023-01-12 09:53:29 +08:00
    虽然不理解查询慢为什么不能优化,但异步执行这种基操我想是可以在一定程度帮到 OP 的。
    woshinide300yuan
        15
    woshinide300yuan  
       2023-01-12 12:05:16 +08:00
    应该是类似 wordpress 的那种网站,伪静态型的,全部都走数据库查询。所以当文章数多了 /机器性能又垃圾时,一个搜索查询就直接让数据库满载了,导致其他用户的访问,比如打开文章都是卡顿状态。
    这种事花钱也解决不了太多问题,查询的方式太拉胯了,只能找人优化,分表。
    darkengine
        16
    darkengine  
       2023-01-12 12:10:08 +08:00
    没做前后端分离,或者是后端渲染的网页吧
    zoharSoul
        17
    zoharSoul  
       2023-01-12 13:37:40 +08:00
    为什么数据库慢会影响网页加载速度呢....
    hhjswf
        18
    hhjswf  
       2023-01-12 14:03:21 +08:00 via Android   ❤️ 1
    “数据库影响页面加载速度”
    这是认知是没拉平,用户问页面怎么一直在转圈圈加载这么慢,前端说数据返回慢找后端,后端说数据库查询慢,哦,那就是数据库影响了页面加载速度。
    corcre
        19
    corcre  
       2023-01-12 14:08:27 +08:00
    还有一种特殊情况, 使用了传说中的 table 布局, 那也确实符合 OP 说的情况...
    lizhenda
        20
    lizhenda  
       2023-01-13 09:28:10 +08:00
    @hhjswf 经典场景
    h0099
        21
    h0099  
       2023-01-15 22:08:20 +08:00   ❤️ 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   945 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:05 · PVG 04:05 · LAX 12:05 · JFK 15:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.