狠狠的研究了一下Mysql数据库方面的资料.
心得如下:
设计数据库结构
我租用的空间,也就是您现在连接的IP,只提供了一个数据库,所以我基本按照服务器端的情况在本地模拟了一个环境,当然,PHP,Mysql,apache的版本都比租的空间的高,不过基本能实现模拟效果.
所谓设计,刚刚开始我只是对着书本上的设计方案进行模拟,在最初的学习,模仿过程中我学会了一些sql的语法,知道了Mysql中的大多数数据格式的用法和特性,还有一些简单的函数,比如:
计数器用得最多的: Last_insert_id()
插入修改时间的: NOW()
高级一点的还有:
Innodb的关联索引键,(使用PHPmyadmin操作很方便)
InnoDB的事务处理,
SART TRANSACTION()
COMMIT()
ROLLBACK()
等用法,不过我经过一再考虑,决定目前不使用INNODB数据库,主要还是速度方面的因素,毕竟作为网站数据库,不需要那么精密的数据库完整性,使用非事务类型的数据库通过结合服务器脚本验证,同样可以达到效果,但是毕竟事务型数据库更偏重于读写量都大的程序,网站,还是用MYISAM比较合适,因为它更适合读操作多的程序.
看了Mysql的官方文档,还了解了INSERT INTO … WHERE…语句的用法(今天才测试成功-_-!);
这些基础的东西实在花费了我不少精力,但是设计数据库就像某位高手说的,重点不在于数据库结构是否”学院”,而是高效,速度.
无论怎么设计,只要速度能达到自己能力的极限,就按照自己的想法去做吧.
那么,怎么提高效率呢?
针对网站程序的设计而言,主要是读多,写少,我选用MYISAM数据库类型,它的SELECT速度已经非常高效和智能了,需要做的仅仅只是设计好各个表的索引,基本上能搞定对大多数的效率问题.
如何设置索引呢?
我摸索这个问题也花费了很多精力,查找资料,解析好多经典程序,包括WordPress的数据库设计,最后还是从一本很旧的书里面看到了答案,也许并不一定完整,但是相当好用,总结成一句话,甚至可以免掉例子,那就是:
把每个SELECT语句中的WHERE后面的键都设置为索引即可.
加几句的话,还有些方法可说:
比如:
如果可以减少查询次数,某些表中存在重叠数据也无妨,毕竟咱们读多写少啊,INERT多几个位置带来SELECT次数的减少,绝对稳赚不赔的.
同样一个SELECT语句,注意把可能性大的那一个(也就是重复次数少的)键放在前面,这样可以减少很多查询时间.如果一个表中存在多个经常同时查询的列,不妨设为多索引(不是一个索引加一个索引,而是联合索引,通过两个键确保唯一性).
基本上,通过以上几点技巧,一个数据库就可以开始设计了,对于整体的设计方案还有技巧,我总结的东西如下:
尽量保持每个表的读写负荷一致或者接近.
比如,一般来说都是把”新闻分类”(Category)作为单独的一个表,”新闻”(news)作为一个表,这样设计结构相当清晰,但是你发现没有,新闻类别的INSERT和UPDATE操作绝对大大少于”新闻”表,那么这两个表的负荷就不太一致了.
如何解决呢?
我目前考虑,把”新闻分类”表结合到”整站控制”(options)表中,因为这两个表都是每次启动程序需要读取的,基本上也就是一次,更改整站的options和类别的几率都很小,这样就减少了一个表的空间,减少了一次查询,而加大了options表的写操作几率,虽然赶不上”新闻”表更新的负荷,却也更接近了些.
同样,如果像WordPress设计,把所有发布的东西都放在post表中,不区分”图片”,”视频”,”blog”,”下载文件”等等,基本上也是为了减少查询次数,结构相当不清晰,效果却不错.但是我个人认为,这样设计并不能针对所有类型的Blog,比如我的”影忆坊”.
我的网站对图片的要求较多,甚至主要就是图片,那么每次查询都会下载很多无用数据,或者通过选择条件过滤也行,而这不仅仅是稍微加大了数据库查询难度,还带来了这个表的数据会越来越庞大,查询速度会越来越慢.所以我考虑需要将主要post类型(比如:’photo’,'movie’单列一个表,同时将不常用的post类型结合为一个表,平均一下各个表的负荷.
接下来是计数器.
计数器其实是个很麻烦的东西.
编写起来很容易,但是就像Timer一样,这玩意是实时运行的,如果对每个post都跟踪计数,整站计数,页面计数,类别计数…..会造成很多额外的INSERT和UPDATE操作.
(目前我考虑针对每个post发表时自动INSERT一个计数器到一个单独的计数器表中,这样会造成计数器表的行数成为’全球首富’,因为它含有所有的post的东西的计数器,另外还有整个程序中相对固定的计数器,所以我再考虑要不要这样设计,如何将其分配到其他地方,例如WordPress这样,直接放在post自身,但是这样会有更多UPDATE操作到post表中了,它已经很累了…)
其他的感觉问题都不是很大,至少我目前了解的东西都在这里了.想到其他的再继续补充.
相关推荐
MySQL 数据库优化技巧总结 MySQL 数据库优化是数据库管理和开发者非常关心的一个问题。由于 MySQL 数据库的性能优化可以直接影响到整个应用系统的性能和用户体验,因此掌握 MySQL 数据库优化技巧对开发者和数据库...
本实训报告主要围绕姜桂洪主编的《MySQL数据库应用与开发》一书,结合2018年清华大学出版社的教材内容,详细介绍了MySQL数据库在Windows10环境下5.7版本的实战操作,涵盖了从安装MySQL服务器到数据库管理的多个关键...
总的来说,MySQL数据库的学习和实践是一个逐步深入的过程,从基础的安装配置到实际的数据库操作,都需要不断练习和掌握。学习MySQL,不仅需要理解SQL语言,还需要了解如何创建、管理数据库,以及处理数据查询、事务...
MySQL数据库在AirNet自动化系统中扮演着至关重要的角色,存储着包括飞行计划、电报在内的所有相关基础资料。由于数据库的稳定运行对于民航空中交通管制的效率和安全性至关重要,因此,对其的维护和管理显得尤为关键...
Mysql 数据库学习总结涵盖了数据库的基本操作、表的基本操作、完整性约束、修改表等方面的知识点。 数据库的基本操作: * 创建数据库:使用 `Create database` 语句创建数据库,例如 `Create database school;`。 ...
MySQL 数据库主从复制是一种常见的高可用性和数据冗余策略,它允许从一个主数据库(Master)异步或半同步地复制数据到一个或多个从数据库(Slave)。这个过程涉及到多个线程和日志机制,确保数据的一致性。 1. **...
Myeclipse连接mysql数据库全程心得 在本文中,我们将详细介绍如何使用MyEclipse连接mysql数据库的全程心得。以下是相关知识点: 1. 安装JDK、Tomcat和MyEclipse 在连接mysql数据库之前,需要安装JDK、Tomcat和...
Myeclipse 连接 MySQL 数据库全程心得 Myeclipse 是一个功能强大且流行的集成开发环境(IDE),它支持多种编程语言,包括 Java、JavaScript、HTML、CSS 等。Myeclipse 提供了许多实用的功能和插件,能够帮助开发者...
对刚入门者学习mysql很有帮助,本文涉及mysql从安装到入门的基本操作和语法,很实用
- 安装MySQL数据库; - 使用数据库管理工具(如phpMyAdmin或MySQL Workbench)进行管理和操作。 - **数据库设计**: - 设计订单(Order)、用户(User)和产品(Product)等相关表; - 创建合理的外键关联以确保数据...
MySQL数据库的安装教程与使用心得
实验报告涉及的知识点主要集中在MySQL数据库的管理和操作上,包括数据库和表的创建、数据的插入、修改和删除,以及对SQL语句的基本运用。以下是详细的解析: 1. **数据库和表的创建**: - **数据库创建**:在MySQL...
### MySQL数据库操作 设计学生表,使用MySQL 5.6设计出学生表,使用select语句输出所有相关信息,并给出截图。查询zhangsan的Computer成绩,并给出截图。修改lisi的Math成绩,改为95,给出截图。 使用Java客户端...
一、源码特点 JSP SSH辅助教学系统 是一套完善的WEB设计系统(struts2+spring+...2、开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为mysql5.0,使用java语言开发。 3、数据库文件名是jspsshfuzhu.sql ,系统名称fuzhu
根据提供的文件信息,以下是从...以上是根据提供的信息整理出来的MySQL知识点,包括了登录、创建数据库、修改密码、使用数据库、创建表、修改表结构等基础操作。这些知识点可以帮助初学者快速上手MySQL的基本使用方法。
在Java中,使用JDBC可以实现对各种数据库的操作,包括Oracle、MySQL等。下面将详细阐述JDBC操作数据库的基本步骤以及一些关键知识点。 1. **加载数据库驱动**: - 在开始数据库操作前,必须先加载对应的数据库驱动...
MySQL 数据库对象实验报告 本实验报告旨在探讨 MySQL 数据库对象的相关知识点,包括字符集设置、视图设计、索引使用和存储过程等方面。 一、字符集设置 字符集是数据库中字符的编码方式,常见的字符集有 latin1、...
在数据库学习过程中,掌握MySQL是...通过理解并熟练应用这些基本操作,你可以有效地管理、操作和查询MySQL数据库中的数据。继续深入学习索引、视图、存储过程、触发器等更高级的概念,将使你在数据库管理领域更加专业。