狠狠的研究了一下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数据库优化心得:选取最适用的字段属性;使用连接(JOIN)来代替子查询(Sub-Queries);使用联合(UNION)来代替手动创建的临时表;事务;锁定表;外键等。
本文件内容围绕资料《MySQL数据库应用与开发》姜桂洪主编,2018年清华大学出版社 展开,里面的内容包括教材前六章的案例,将其整理并手动实践过,实验步骤完全可行。实验环境为Windows10 MySQL 5.7,其中包括 一. ...
AirNet自动化系统中MySQL数据库维护心得.pdf
Mysql数据库学习总结.pdf
jsp数据库基本操作实验+mysql数据库连接
对刚入门者学习mysql很有帮助,本文涉及mysql从安装到入门的基本操作和语法,很实用
2.2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Sla
一、源码特点 JSP SSH辅助教学系统 是一套完善的WEB设计系统(struts2+spring+...2、开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为mysql5.0,使用java语言开发。 3、数据库文件名是jspsshfuzhu.sql ,系统名称fuzhu
这是我刚搭建完成阿里云上的jdk tomcat mysql的一些安装心得
Myeclipse连接mysql数据库(给力的写)全程心得).pdf
本篇文章是对mysql数据库优化进行了详细的总结与介绍,需要的朋友参考下
适合人群: Linux初学者、Linux运维人员、想从事数据库相关工作的小白、计算机专业在校学生、DBA 学习计划: ...本DBA课程,里面覆盖了MySQL数据库所有核心知识点,原理+实战,真实生产环境案例讲解
Myeclipse连接mysql数据库(给力的写)全程心得)[汇编].pdf
本人在数据库学习中所记录下来的笔记,有关于建表,查找,更新等信息
本是内容是创建用于企业管理的员工数据库,数据库名为 yggl,包含员工信息,部门信息及员工薪水信息。数据库 yggl 包含 3 个表……里面一共包含八份实验,结果、分析都写得得很完整。
我是给同学做一个J2EE 关于struct+hibernate...Myeclipse连接mysql数据库之前先搞定这几项: 步骤: 1. Install JDK,Tomcat,myeclipse (现在MyEclipse8.5已经全部封装,不需要eclipse了,当然我个人认为还是去尝试eclips
包含几种mysql安装方式,同时检查mysql数据库所需依赖包.
前一阵在做项目的时候,需要通过nodejs连接到MySQL数据库,于是简单地学习了一下MySQL这个库,分享一些学习心得给大家,希望对大家有帮助。下面这篇文章主要介绍了Node.js数据库操作之连接MySQL数据库的相关资料,...
第1章 数据库系统概述.ppt 第2章 数据模型.ppt 第3章__数据库系统的体系结构.ppt 第4章__关系数据库方法.ppt 第5章__关系数据库的结构化查询语言SQL.ppt 第6章__关系模式的规范化理论.ppt 第7章__数据库设计.ppt ...