Home Database Mysql Tutorial 10条关于数据库的技巧和经验_MySQL

10条关于数据库的技巧和经验_MySQL

Jun 01, 2016 pm 01:03 PM
Skill database experience

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脚本实现等。
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

A must-have for veterans: Tips and precautions for * and & in C language A must-have for veterans: Tips and precautions for * and & in C language Apr 04, 2024 am 08:21 AM

In C language, it represents a pointer, which stores the address of other variables; & represents the address operator, which returns the memory address of a variable. Tips for using pointers include defining pointers, dereferencing pointers, and ensuring that pointers point to valid addresses; tips for using address operators & include obtaining variable addresses, and returning the address of the first element of the array when obtaining the address of an array element. A practical example demonstrating the use of pointer and address operators to reverse a string.

How does Hibernate implement polymorphic mapping? How does Hibernate implement polymorphic mapping? Apr 17, 2024 pm 12:09 PM

Hibernate polymorphic mapping can map inherited classes to the database and provides the following mapping types: joined-subclass: Create a separate table for the subclass, including all columns of the parent class. table-per-class: Create a separate table for subclasses, containing only subclass-specific columns. union-subclass: similar to joined-subclass, but the parent class table unions all subclass columns.

iOS 18 adds a new 'Recovered' album function to retrieve lost or damaged photos iOS 18 adds a new 'Recovered' album function to retrieve lost or damaged photos Jul 18, 2024 am 05:48 AM

Apple's latest releases of iOS18, iPadOS18 and macOS Sequoia systems have added an important feature to the Photos application, designed to help users easily recover photos and videos lost or damaged due to various reasons. The new feature introduces an album called "Recovered" in the Tools section of the Photos app that will automatically appear when a user has pictures or videos on their device that are not part of their photo library. The emergence of the "Recovered" album provides a solution for photos and videos lost due to database corruption, the camera application not saving to the photo library correctly, or a third-party application managing the photo library. Users only need a few simple steps

An in-depth analysis of how HTML reads the database An in-depth analysis of how HTML reads the database Apr 09, 2024 pm 12:36 PM

HTML cannot read the database directly, but it can be achieved through JavaScript and AJAX. The steps include establishing a database connection, sending a query, processing the response, and updating the page. This article provides a practical example of using JavaScript, AJAX and PHP to read data from a MySQL database, showing how to dynamically display query results in an HTML page. This example uses XMLHttpRequest to establish a database connection, send a query and process the response, thereby filling data into page elements and realizing the function of HTML reading the database.

How to handle database connection errors in PHP How to handle database connection errors in PHP Jun 05, 2024 pm 02:16 PM

To handle database connection errors in PHP, you can use the following steps: Use mysqli_connect_errno() to obtain the error code. Use mysqli_connect_error() to get the error message. By capturing and logging these error messages, database connection issues can be easily identified and resolved, ensuring the smooth running of your application.

Detailed tutorial on establishing a database connection using MySQLi in PHP Detailed tutorial on establishing a database connection using MySQLi in PHP Jun 04, 2024 pm 01:42 PM

How to use MySQLi to establish a database connection in PHP: Include MySQLi extension (require_once) Create connection function (functionconnect_to_db) Call connection function ($conn=connect_to_db()) Execute query ($result=$conn->query()) Close connection ( $conn->close())

How to use database callback functions in Golang? How to use database callback functions in Golang? Jun 03, 2024 pm 02:20 PM

Using the database callback function in Golang can achieve: executing custom code after the specified database operation is completed. Add custom behavior through separate functions without writing additional code. Callback functions are available for insert, update, delete, and query operations. You must use the sql.Exec, sql.QueryRow, or sql.Query function to use the callback function.

How to connect to remote database using Golang? How to connect to remote database using Golang? Jun 01, 2024 pm 08:31 PM

Through the Go standard library database/sql package, you can connect to remote databases such as MySQL, PostgreSQL or SQLite: create a connection string containing database connection information. Use the sql.Open() function to open a database connection. Perform database operations such as SQL queries and insert operations. Use defer to close the database connection to release resources.

See all articles