`
zhang_ly520
  • 浏览: 162518 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL数据库中对前端和后台进行系统优化

阅读更多

本文中介绍的系统优化,主要针对前端和后台这两方面(后台方面主要对SQL语句和数据存储进行了优化),下文中我们将介绍一些优化技巧和经验。
  技巧:
  1. 如何查出效率低的语句?
  在MySQL下,在启动参数中设置 --log-slow-queries=[文件名],就可以在指定的日志文件中记录执行时间超过long_query_time(缺省为10秒)的SQL语句。你也可以在启动配置文件中修改long query的时间,如:
  # Set long query time to 8 seconds
  long_query_time=8
  2. 如何查询某表的索引
  可使用SHOW INDEX语句,如:
  SHOW INDEX FROM [表名]
  3. 如何查询某条语句的索引使用情况?
  可用EXPLAIN语句来看一下某条SELECT语句的索引使用情况。如果是UPDATE或DELETE语句,需要先转换为SELECT语句。
  4. 如何把导出INNODB引擎的内容到错误日志文件中?
  我们可以使用SHOW INNODB STATUS命令来查看INNODB引擎的很多有用的信息,如当前进程、事务、外键错误、死锁问题和其它一些统计数据。如何让该信息能记录在日志文件中 呢?只要使用如下语句创建innodb_monitor表,MySQL就会每15秒钟把该系统写入到错误日志文件中:
  CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;
  如果你不再需要导出到错误日志文件,只要删除该表即可:
  DROP TABLE innodb_monitor;
  5. 如何定期删除庞大的日志文件?
  只要在启动配置文件中设置日志过期时间即可:
  expire_logs_days=10
  注意事项:
  1. 重点关注索引
  下面以表TSK_TASK表为例说明SQL语句优化过程。TSK_TASK表用于保存系统监测任务,相关字段及索引如下:
  ID:主键;
  MON_TIME:监测时间;建了索引;
  STATUS_ID:任务状态;与SYS_HIER_INFO.ID建立了外键关系。
  注MySQL自动会为外键建立索引,在本次优化过程中,发现这些自动建立的外键索引会对SQL语句的效率产生不必要的干扰,需要特别注意!
  首先,我们在日志文件中查到下面语句的执行比较慢,超过10秒了:
  # Query_time: 18 Lock_time: 0 Rows_sent: 295 Rows_examined: 88143
  select * from TSK_TASK WHERE STATUS_ID = 1064 and MON_TIME >= '2007-11-22' and MON_TIME < '2007-11-23';
  
  原来在88143条记录中要查出符合条件的295条记录,那当然慢了。赶紧用EXPLAIN语句看一下索引使用情况吧:
  +----+-------------+----------+------+----------
  | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
  +----+-------------+----------+------+-----------
  | 1 | SIMPLE | TSK_TASK | ref | FK_task_status_id_TO_SYS_HIER_INFO,TSK_TASK_KEY_MON_TIME | FK_task_status_id_TO_SYS_HIER_INFO | 9 | const | 276168 | Using where |
  +----+-------------+----------+------+-----------
  可以看出,有两个索引可用FK_task_status_id_TO_SYS_HIER_INFO,TSK_TASK_KEY_MON_TIME,而最终执行语句时采用了STATUS_ID上的外键索引。
  再看一下TSK_TASK表的索引情况吧:
  +----------+------------------------------------
  | Table | Key_name | Column_name | Cardinality |
  +----------+------------+-----------------------
  | TSK_TASK | PRIMARY | ID | 999149 |
  | TSK_TASK | FK_task_status_id_TO_SYS_HIER_INFO | STATUS_ID | 16 |
  | TSK_TASK | TSK_TASK_KEY_MON_TIME | MON_TIME | 13502 |
  +----------+------------------------------------
  在Oracle或其他关系数据库下,WHERE条件中的字段顺序对索引的选择起着很重要的作用。我们调整一下字段顺序,把STATUS_ID放在后面,再EXPLAIN一下:
  EXPLAIN select * from TSK_TASK WHERE MON_TIME >= '2007-11-22' and MON_TIME < '2007-11-23' and STATUS_ID = 1064;
  但是没什么效果,MySQL还是选用系统建立的STATUS_ID外键索引。
  仔细分析一下,看来Cardinality属性(即索引中的唯一值的个数)对索引的选择起了极其重要的作用,MySQL选择了索引值唯一值个数小的那个索引作为整条语句的索引。
  针对这条语句,如果使用FK_task_status_id_TO_SYS_HIER_INFO做索引,而TSK_TASK表中存放很多天数据的话,那扫描的记录数会很多,速度较慢。可以有以下几个优化方案:
  如果一天的任务数不多的话,我们删除索引FK_task_status_id_TO_SYS_HIER_INFO,那MySQL会使用索引TSK_TASK_KEY_MON_TIME,然后在该天的数据中在扫描STATUS_ID为1064的记录,那速度也不慢;
  如果一天的任务数多的话,我们需删除索引FK_task_status_id_TO_SYS_HIER_INFO和TSK_TASK_KEY_MON_TIME,然后再建立STATUS_ID,MON_TIME的联合索引,这样效率肯定会很高。
  因此建议,对那些记录数多的表,建议不要使用外键,以避免造成性能效率的严重降低。
  2. 尽量控制每张表的记录数
  当一张表的记录数很大时,管理和维护就会很麻烦,如索引维护就会占用很长时间,从而会给系统的正常运行造成很大的干扰。
  对随时间推移数据量不断增长的表,我们可以根据时间来区分实时数据和历史数据,可以使用后台服务程序定期移动实时表中的数据到历史表中,从而控制实时表的 记录数,提高查询和操作效率。但注意每次移动的时间要足够短,不要影响正常程序的数据写入。如果占用时间太长,可能会造成死锁问题。
  3. 数据散列(partition)策略
  当客户数达到一定规模后,单个数据库将无法支撑更高的并发访问,此时可以考虑把客户数据散列(partition)到多个数据库中,以分担负载,提高系统的整体性能与效率。

分享到:
评论

相关推荐

    酒店宾馆管理系统 springboot项目 mysql数据库 登陆界面 前端后台 layui

    酒店宾馆管理系统 配置直接使用intellij idea的springboot打开 等待把dependence下载完毕(配置maven 修改下载源) 配置的properties中数据库需要改变不然会报错,填成自己的 然后运行项目 本地的话就127.0.0.1:...

    Python基于前端+flask框架+mysql数据库的学生管理系统网站源码.zip

    Python基于前端+flask框架+mysql数据库的学生管理系统网站源码.zip Python基于前端+flask框架+mysql数据库的学生管理系统网站源码.zip Python基于前端+flask框架+mysql数据库的学生管理系统网站源码.zip Python基于...

    JSP在线考试系统,后台数据库为MySQL

    6. **前端交互**:JSP页面负责用户界面的展示和交互,通过Servlet进行服务器端逻辑处理,与MySQL数据库进行数据交换。AJAX技术还可以实现页面的部分刷新,提升用户体验。 7. **扩展性**:随着系统的发展,可能需要...

    微信小程序订票选座PHP后台网站MySQL数据库和无前端小程序版本两个程序

    本文将详细讲解“微信小程序订票选座PHP后台网站MySQL数据库和无前端小程序版本两个程序”的相关知识,涉及微信小程序开发、PHP后端编程、MySQL数据库管理和电影订票选座功能的实现。 首先,微信小程序是一种轻量级...

    数据库系统课程设计-基于Java+Vue+Mysql开发的锁酒店预订平台,涵盖前端和后台(整套源码)

    数据库系统课程设计--基于Java+Vue+Mysql开发的锁酒店预订平台,涵盖前端和后台(整套源码),非常好的资源! 数据库系统课程设计--基于Java+Vue+Mysql开发的锁酒店预订平台,涵盖前端和后台(整套源码),非常好的...

    微信音乐答题,MYSQL数据库,java后台,数据库文件存在错误

    在构建微信音乐答题小程序的过程中,涉及的技术栈包括微信小程序、MySQL数据库以及Java后台。这个项目可能面临的问题主要是数据库文件存在的错误,以及如何有效地整合这些技术。以下是对这些知识点的详细说明: 1. ...

    ssm后台管理系统框架(Spring mvc + mybatis + mysql + easyui )附mysql数据库

    SSM后台管理系统框架是基于Java开发的Web应用的常用架构,由Spring MVC、Mybatis和MySQL数据库配合EasyUI前端框架构建。这个系统提供了一个全面的后台管理解决方案,适合企业级应用,如客户关系管理(CRM)等业务...

    图书后台管理系统,使用Servlet、LayUi前端框架、mysql数据库开发.zip

    本项目——“图书后台管理系统”就是一个典型的Java Web应用实例,它巧妙地结合了Servlet、LayUi前端框架和MySQL数据库,为图书管理提供了高效、便捷的解决方案。 Servlet,作为Java服务器端编程的核心技术,是Java...

    人事管理系统Java源码 MySQL数据库

    本系统采用Java作为主要开发语言,结合MySQL数据库进行数据存储,构建了一个小型的公司人事管理系统。下面我们将深入探讨该系统的相关知识点。 首先,Java是后端开发的主流语言之一,以其跨平台性和优秀的性能闻名...

    前端后台MySQL数据库网课平台在线学习平台设计

    标题 "前端后台MySQL数据库网课平台在线学习平台设计" 暗示了我们要讨论的是一个集成了前端、后端和数据库技术的在线教育系统。这个系统利用MySQL作为数据存储,PHP作为后端处理语言,为用户提供课程学习和交互功能...

    Ebuy易买网商城项目MySQL数据库前台+后台

    【Ebuy易买网商城项目】是一个综合性的电子商务平台,基于MySQL数据库,采用了Java和JSP技术进行开发。该项目不仅提供了完整的前端展示,还具备完善的后台管理系统,实现了线上购物的各种功能。 1. **MySQL数据库**...

    基于Java实现的在线考试系统 + mysql数据库文件 + 前端页面

    - mysql数据库,mybatis(通用Mapper、PageHelper分页助手) - springBoot(spring、springMVC) - springCloud(eureka、zuul、feign)搭建微服务工程 - nginx反向代理域名 - 采用jwt+rsa加密生成token,写入cookie的...

    数据库的前端应用

    数据库的前端应用是连接用户与数据存储系统的重要接口,它为用户提供了一个友好的图形界面,使得非技术背景的用户也能方便地操作、查询和管理数据库。在这个完整的例子中,我们探讨的是如何构建这样的前端应用,并对...

    JSP图书管理系统加MYSQL数据库

    本系统采用Java Server Pages(JSP)作为前端展示技术,结合MySQL数据库进行后端数据存储,形成了一套完整的Web应用程序。本文将深入探讨JSP与MySQL的集成应用以及在图书管理系统中的具体实现。 首先,JSP是一种...

    JAVAWEB+Mysql数据库实现注册登录数据库

    总的来说,"JAVAWEB+Mysql数据库实现注册登录数据库"是一个涵盖后端编程、数据库设计、前端交互和安全策略等多个方面的综合实践。通过这个过程,开发者可以深入理解Web应用的生命周期,提升自己的全栈开发能力。

    MySQL数据库用户在线注册系统

    总之,MySQL数据库用户在线注册系统是一个结合了MySQL数据库管理、phpMyAdmin图形界面和前端交互设计的综合应用,为用户提供便捷的在线注册和数据库管理服务。同时,它也体现了Web开发中的多种技术和最佳实践,如...

    thinkphp+小程序商城+前端页面+后台管理+mysql数据库

    本文将详细讲解如何使用ThinkPHP框架配合微信小程序,搭建一个包含前端页面、后台管理系统以及MySQL数据库的完整商城系统。 1. **ThinkPHP框架**:ThinkPHP是一款国内广泛使用的开源PHP框架,以其简洁的代码结构、...

    微信小程序-点餐系统(包含前端小程序,后台nodejs及mysql数据库表).zip

    微信小程序-点餐系统(包含前端小程序,后台nodejs及mysql数据库表)mhzqx-微信App微信小程序-点餐系统(包含前端,后台及数据库表)小程序预览由于没有正式上线使用,仅作为demo使用,所以请移步csdn预览动图 ...

    数据库课设学生宿舍管理系统源码java spring mysql

    本项目是一个基于Java Swing、MySQL数据库的学生活动管理系统,主要目标是为高校提供一个方便、高效的宿舍管理解决方案。此系统适用于数据库课程设计,能够帮助学生深入理解和实践Java后端开发与数据库应用的结合。 ...

Global site tag (gtag.js) - Google Analytics