検索
ホームページデータベースmysql チュートリアル10条关于数据库的技巧和经验_MySQL

1)字段长度和类型:数据来自外系统的一定要与外系统保持一致,避免插入失败或截断。禁止使用Blob,Clob,Text,Image等大字段。 2)中间表:多对多关联需要添加中间表,多对一加关联字段即可。关联字段为了避免数据迁移麻烦,可以不用自增长ID关联,而是用实际业务关联的值。 3)联接查询:若表字段过多,则根据业务拆出一个或多个字表。若有关联过多,则可在主表冗余一些需要的字段来减少查询时的表关联。 4)索引与性能:(后续) 5)并发访问(读写):当读操作远大于写操作时,利用中间件分发或在程序中自行配置不同的读和写数据源来实现读写分离。主库的数据修改同步到各个从库上去。以MySQL为例,从库可使用MyISAM引擎提升性能,主从分离后不仅服务器增加,同时还极大缓解排它锁和共享锁的竞争。 6)并发访问(写): 四种并发问题 丢失或覆盖更新:多个事务读取同一数据,并发更新时发生更新丢失问题。 脏读:一个事务读取到了另一个未提交事务写的数据。 不可重复读:一个事务重新读取前面读过的数据,发现已被另一事务修改。 幻影读:一个事务重新读取前面读过的数据,发现多了或少了几行。 Oracle和SQLServer默认级别为读提交(Read-Committed, RC),MySQL/InnoDB默认为可重复读(Read-Repeatable, RR)。能解决的并发问题如下: ========================================================================
       隔离级别               脏读(Dirty Read)          不可重复读(NonRepeatable Read)     幻读(Phantom Read) 
========================================================================
未提交读(Read uncommitted)        可能                            可能                       可能
已提交读(Read committed)          不可能                          可能                        可能
可重复读(Repeatable read)          不可能                          不可能                     可能
可串行化(Serializable )                不可能                          不可能                     不可能
串行化事务 最简单策略就是修改事务级别为可串行化,这样某一事务执行时会禁止其他事务执行。但这种方法实际上不可行,因为它使程序对数据库的操作变成单线程的了,不能充分共享数据库资源。 悲观锁控制 当用户执行的操作时会在数据上加锁,直到当前事务释放锁时,其他事务才能执行与该锁相冲突的操作。 以MySQL的事务为例: set autocommit=0; begin; select status from t_goods where id=1 for update ... commit; 默认为行锁,超过一定行数升级为表锁。执行select... for update后,则其他select...for update对此数据的查询会阻塞,但普通select此表不会受影响。 乐观锁控制 用时间戳或版本号控制。用户读数据时不锁定,但查询数据时也一起将控制字段查出。当用户更新时先检查此时数据库中控制字段的值与程序中之前拿到的值是否相同。不同则此条数据已被处理,相同则更新数据,并同时更新控制字段的值为当前时间戳或版本号加1。 7)小事务:避免长时间锁定数据,可以将大数据量的更新或删除分成批次,一个批次是一个小事务。通过记录已成功批次的序号方便意外终止后的恢复。 8)数据删除:删除时可先逻辑删除,更新一个标记列的值表示数据已无效,达到记录留存的作用。日后真正无用时可做物理删除。 9)扩展性:核心表预留出Int,Long,Char等各种类型的扩展字段。 10)分区分库:日均数据增长量大的表,可以按进行分区甚至复合分区。过期数据进行删除或归档到历史库。归档方法可采用:定期请求DBA手动、应用程序(如Java)中实现、服务器上部署Shell脚本实现等。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
深入理解MySQL索引优化器工作原理深入理解MySQL索引优化器工作原理Nov 09, 2022 pm 02:05 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引优化器工作原理的相关内容,其中包括了MySQL Server的组成,MySQL优化器选择索引额原理以及SQL成本分析,最后通过 select 查询总结整个查询过程,下面一起来看一下,希望对大家有帮助。

数据库系统的构成包括哪些数据库系统的构成包括哪些Jul 15, 2022 am 11:58 AM

数据库系统由4个部分构成:1、数据库,是指长期存储在计算机内的,有组织,可共享的数据的集合;2、硬件,是指构成计算机系统的各种物理设备,包括存储所需的外部设备;3、软件,包括操作系统、数据库管理系统及应用程序;4、人员,包括系统分析员和数据库设计人员、应用程序员(负责编写使用数据库的应用程序)、最终用户(利用接口或查询语言访问数据库)、数据库管理员(负责数据库的总体信息控制)。

PHP开发心得分享:掌握各种功能实现的经验与建议PHP开发心得分享:掌握各种功能实现的经验与建议Nov 22, 2023 pm 12:02 PM

在当前互联网高速发展的时代,PHP作为一种服务器端脚本语言,被越来越多的开发者所采用。PHP具有简单易学、灵活、开源免费等优势,可以快速开发各种网站和Web应用。然而,作为一名PHP开发者,要想在激烈的竞争中脱颖而出并写出高效稳定的代码,还需要掌握各种功能的实现技巧和经验。首先,合理规划项目架构是开发PHP应用的关键。一个良好的项目架构可以提供更好的代码可维

数据库的什么是指数据的正确性和相容性数据库的什么是指数据的正确性和相容性Jul 04, 2022 pm 04:59 PM

数据库的“完整性”是指数据的正确性和相容性。完整性是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。完整性对于数据库系统的重要性:1、数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据;2、合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能;3、完善的数据库完整性有助于尽早发现应用软件的错误。

access数据库的结构层次是什么access数据库的结构层次是什么Aug 26, 2022 pm 04:45 PM

结构层次是“数据库→数据表→记录→字段”;字段构成记录,记录构成数据表,数据表构成了数据库。数据库是一个完整的数据的记录的整体,一个数据库包含0到N个表,一个表包含0到N个字段,记录是表中的行。

mysql查询慢的因素除了索引,还有什么?mysql查询慢的因素除了索引,还有什么?Jul 19, 2022 pm 08:22 PM

mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题。遇到这种问题,我们一般也会想到是因为索引。那除开索引之外,还有哪些因素会导致数据库查询变慢呢?

MySQL获取时间、格式转换各类操作方法详解MySQL获取时间、格式转换各类操作方法详解Nov 07, 2022 pm 05:06 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于mysql获取时间、格式转换各类操作方法的相关内容, 下面一起来看一下,希望对大家有帮助。

踩过的坑:Go语言项目开发经验与教训踩过的坑:Go语言项目开发经验与教训Nov 03, 2023 am 08:14 AM

踩过的坑:Go语言项目开发经验与教训在软件开发的道路上,每个开发者都会不可避免地踩过一些坑。当然,对于Go语言的开发者来说也不例外。本文将分享我在使用Go语言进行项目开发过程中所踩过的坑,希望能给其他开发者带来一些经验和教训。不同版本的Go语言在使用Go语言进行项目开发时,我们必须关注Go语言的版本。不同版本之间可能存在一些语言上的差异或者API的变动,这些

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません