1、开发数据库时常用命名规范 1、使用不包含数字的单数表名,如果必要的话可以增加模块名前缀。 2、对于主键的命名,使用表名+ID的形式。 3、作为外键的列的名字应该与它们所对应的主键的列名相同,除非该外键维护的是一种自反/递归的关系。 4、避免使用缩写
1、开发数据库时常用命名规范
1>、使用不包含数字的单数表名,如果必要的话可以增加模块名前缀。
2>、对于主键的命名,使用表名+ID的形式。
3>、作为外键的列的名字应该与它们所对应的主键的列名相同,除非该外键维护的是一种自反/递归的关系。
4>、避免使用缩写。
2、主键设计原则
1>、主键用途:惟一标识一行;作为一个可以被外部键有效引用的对象。
2>、主键应当对用户没有意义。
3>、主键应该是单列的,以便提高连接和筛选操作的效率。复合主键仅用于描述多对多关系的连接表中用两个外键来作为主键。
4>、永远不要更新主键。
5>、主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
6>、主键应当由计算机自动生成。
7>、主键是通过Unique约束(非空约束)以及聚集或非聚集惟一索引来实现的。主键应当是没有实际意义的、单列的、由计算机生成的、不可编辑的,而且对用户来说是不可见的。
2.1、创建主键
在表结构设计中使用聚集索引创建索引,并不是最好,由于每个表只能创建一个聚集索引,这样的做法会失去为每个表创建其他更有效的聚集索引的机会。
sql语句创建非聚集索引主键:
<span>CREATE</span> <span>TABLE</span><span> dbo.Product ( ProductID </span><span>INT</span> <span>IDENTITY</span>(<span>1</span>,<span>1</span>) <span>PRIMARY</span> <span>KEY</span> <span>NONCLUSTERED</span><span>, ProductName </span><span>VARCHAR</span>(<span>100</span>) <span>NULL</span><span> )</span>
2.2、主键使用标识列
标识列优点:易于人工识别,占用空间小而且快。
将标识列设置为使用聚集索引的主键(这是一种很常见,但并不好的方法),当单个用户检索一行记录的时候,其速度极快。然而,这样的设计方法会在数据库中形成锁争用的热点。
2.3、主键使用GUID
GUID是由16个字节的16进制数组成,不会出现重复的数字。与标识列相比,GUID可以在更大的范围保证惟一性。
GUID优点:复制使用GUID主键的数据库时不必额外做全面的检查,GUID值的随机性可以减少数据库的热点,可以使用多种方法来生成GUID的值。
sql语句创建GUID主键表:
<span>CREATE</span> <span>TABLE</span><span> dbo.Product ( ProductID </span><span>UNIQUEIDENTIFIER</span> <span>DEFAULT</span>(<span>NEWID</span>()) <span>PRIMARY</span> <span>KEY</span> <span>NONCLUSTERED</span><span>, ProductName </span><span>VARCHAR</span>(<span>100</span>) <span>NULL</span><span> )</span>
3、外键设计原则
外键可以引用除了临时表以外的其他表的主键、Unique约束或惟一索引的列。
4、索引
SQL Server使用两种基本类型的索引:聚集索引和非聚集索引。一般创建索引的列为:主键、外键、order by列。
索引设计原则:
◊ 索引并不是越多越好,一个表中如果有大量的索引,不仅占用大量的磁盘空间,而且会影响INSERT、DELETE、UPDATE等语句的性能。当表数据更新时,索引也会进行调整和更新。
◊ 避免对经常更新的表进行过多的索引,并且索引的列尽可能少。对经常用于查询的字段应该创建索引,但要避免添加不必要的字段。
◊ 数据量小的表最好不要使用索引,由于数据较少,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果。
◊ 在条件表达式中经常用到的、不同值较多的列上建立索引,在不同值少的列上不要建立索引。比如【性别】字段是只有【男】和【女】两个不同值,因此就无须建立索引。如果建立索引,不但不会提高效率,反而会严重降低更新速度。
◊ 当唯一性是某种数据本身的特征时,指定唯一索引。使用唯一索引能够确保定义的列的数据完整性,提高查询速度。
◊ 在频繁进行排序或分组(ORDER BY或GROUP BY)的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。
4.1、非聚集索引
创建非聚集索引SQL语句:
<span>CREATE</span> <span>NONCLUSTERED</span> <span>INDEX</span> IX_ProductNo <span>ON</span> dbo.Product(ProductNo)
4.2、聚集索引
聚集索引将表中的记录行与索引键值以同样的物理顺序存储。由于数据只可能有一种物理存储顺序,因此每个表只能有一个聚集索引。通过聚集索引检索数据只需要更少的逻辑读取的次数,任意非聚集索引都将指向聚集索引的ID而不需要指向数据页。
聚集索引将具有同样索引键值的记录行集中到尽可能少的数据页中,因而减少了检索一组记录时需要读取的数据页数。所以,对于那些经常作为条件来查询一组记录的列,如类似于OrderDetail.OrderID这样的从表外键,对其建立聚集索引是一个很好的选择。基于同样的原因,对于只返回一行记录的查询,使用聚集索引不会明显地提高性能。
对于聚集索引,常见的错误认识有:
1>、聚集索引会降低insert操作的速度,因为必须要向后移动一半的数据来为插入的行腾出空间。这种认识是错误的,因为可以利用填充因子控制填充的百分比,从而在索引页上为新插入的数据保留空间。如果索引页填满了,SQL Server将会进行页拆分,在这种情况下只有第一个页才会受到影响。
2>、在使用标识列的主键上创建聚集索引是一种好的设计方法,它可以使对表的操作达到最快速度。这种认识是错误的,它浪费了创建其他更有效的聚集索引的机会。并且,使用这种方法把每个新插入的记录行都存储到表尾部的同一个数据页中,这将导致数据库的热点与锁争用。虽然行锁可以部分地缓解这个热点问题,但是,根据要锁定的行的数量、页上的行的数量、用户的数量,锁管理器有可能会把行锁升级为页锁,此时又会出现热点问题。
3>、聚集索引是具有魔力的。如果哪个查询的速度不够快,那么久在该列上创建聚集索引,对于表的操作速度一定会得到提高。这种认识是错误的,聚集索引只是比非聚集索引稍微快一点点。因为在每个表上只能创建一个聚集索引,索引它也是一种宝贵的性能资源,只有在那些经常作为条件查询一组记录行的列上才应该创建聚集索引。
SQL语句创建聚集索引:
<span>CREATE</span> <span>CLUSTERED</span> <span>INDEX</span> IX_OrderID <span>ON</span> dbo.OrderDetail(OrderID)
SQL语句删除索引:
<span>DROP</span> <span>INDEX</span> OrderDetail.IX_OrderID
4.3、组合索引
组合索引是拥有多个索引列的聚集或非聚集索引。因为组合索引包含多个索引列,所以只有在创建表之后,才能使用create index DDL命令来创建。
SQL语句创建组合索引:
<span>CREATE</span> <span>NONCLUSTERED</span> <span>INDEX</span> IX_ProductNoProductName <span>ON</span> dbo.Product(ProductNo,ProductName)
在组合索引中,索引排列的先后顺序非常重要。因为只有这样的一些查询才能够使用组合索引:它们在查询条件中所包含的索引列在组合索引中是从第一个索引列开始按照从左到右的顺序依次排列的。上例的组合索引中,索引列的顺序是ProductNo、ProductName,只以ProductName为条件的查询将不会使用这个索引,只有以ProductNo或者ProductNo和ProductName为条件的查询才能使用这个索引。
4.4、索引选项
1>、Unique索引
SQL Server的索引具有几个选项,包括惟一性、空间分配和性能选项。
unique索引选项并非只是一个具有惟一约束的索引;对于unique索引可以进行索引优化。在创建主键或者unique约束时,系统都会自动地为它们创建unique索引。
CREATE UNIQUE INDEX IX_OrderNo ON dbo.Order.OrderNo
2>、索引填充因子(FillFactor)和填充索引(PAD_INDEX)
索引需要在其索引树上保留一点空间,这样,在插入新的记录时就不必对索引进行重构。填充因子指定了在索引上填有数据空间所占的百分比。
填充因子应该设置为多少才最合适,取决于数据库的用途。如果数据库主要用于数据检索,就应该将填充因子设为较大的值以尽可能填满一个索引页的空间。如果需要对表进行大量插入操作,在索引页上保留一些空间就可以提供更新操作的性能。如果对于表插入操作的数量变化幅度较大,将填充因子设置为一个中间的值,并选择填充索引选项就比较合适。
<span>CREATE</span> <span>UNIQUE</span> <span>INDEX</span> IX_OrderNo <span>ON</span> dbo.<span>Order</span>.OrderNo <span>WITH</span> <span>FILLFACTOR</span><span>=</span><span>85</span> PAD_INDEX
3>、索引排序选项(ASC|DESC)
尽管SQL Server可以创建降序索引,但不建议改变默认的升序索引顺序。这样做并不能改善性能,但却容易在今后造成一些混乱。除非明确地在Order by字句中使用desc选项,否则,所有使用order by字句的查询仍将按照升序排序。
创建升序或者降序索引的方法是:在create index DDL命令中的列名之后使用asc或者desc选项。
<span>CREATE</span> <span>UNIQUE</span> <span>INDEX</span> IX_OrderNo <span>ON</span> dbo.<span>Order</span>.OrderNo <span>DESC</span> <span>WITH</span> <span>FILLFACTOR</span><span>=</span><span>85</span> PAD_INDEX
4>、忽略重复键选项(IGNORE_DUP_KEY)
忽略重复键选项不是作用于索引的,它指定了索引对今后的数据修改操作的处理方式。
通常,事务都是原子的,这意味着整个事务中的操作作为一个逻辑单元要么全部成功,要么全部失败。如果设置了忽略重复键选项,允许insert事务只提交那些为unique索引所接收的记录行,而忽略那些违反了unique索引的惟一性的记录行。
这样选项不会破坏unique索引。在表中仍然不会插入重复的值,所以数据库的一致性是完整无损的,但事务的原子性却被违反了。
利用这个选项可以方便地向数据库中导入大量可能存在问题的记录行,但是消弱了数据库的ACID属性。
<span>CREATE</span> <span>UNIQUE</span> <span>INDEX</span> IX_OrderNo <span>ON</span> dbo.<span>Order</span>.OrderNo <span>WITH</span> IGNORE_DUP_KEY

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템으로, 주로 데이터를 신속하고 안정적으로 저장하고 검색하는 데 사용됩니다. 작업 원칙에는 클라이언트 요청, 쿼리 해상도, 쿼리 실행 및 반환 결과가 포함됩니다. 사용의 예로는 테이블 작성, 데이터 삽입 및 쿼리 및 조인 작업과 같은 고급 기능이 포함됩니다. 일반적인 오류에는 SQL 구문, 데이터 유형 및 권한이 포함되며 최적화 제안에는 인덱스 사용, 최적화 된 쿼리 및 테이블 분할이 포함됩니다.

MySQL은 데이터 저장, 관리, 쿼리 및 보안에 적합한 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1. 다양한 운영 체제를 지원하며 웹 응용 프로그램 및 기타 필드에서 널리 사용됩니다. 2. 클라이언트-서버 아키텍처 및 다양한 스토리지 엔진을 통해 MySQL은 데이터를 효율적으로 처리합니다. 3. 기본 사용에는 데이터베이스 및 테이블 작성, 데이터 삽입, 쿼리 및 업데이트가 포함됩니다. 4. 고급 사용에는 복잡한 쿼리 및 저장 프로 시저가 포함됩니다. 5. 설명 진술을 통해 일반적인 오류를 디버깅 할 수 있습니다. 6. 성능 최적화에는 인덱스의 합리적인 사용 및 최적화 된 쿼리 문이 포함됩니다.

MySQL은 성능, 신뢰성, 사용 편의성 및 커뮤니티 지원을 위해 선택됩니다. 1.MYSQL은 효율적인 데이터 저장 및 검색 기능을 제공하여 여러 데이터 유형 및 고급 쿼리 작업을 지원합니다. 2. 고객-서버 아키텍처 및 다중 스토리지 엔진을 채택하여 트랜잭션 및 쿼리 최적화를 지원합니다. 3. 사용하기 쉽고 다양한 운영 체제 및 프로그래밍 언어를 지원합니다. 4. 강력한 지역 사회 지원을 받고 풍부한 자원과 솔루션을 제공합니다.

InnoDB의 잠금 장치에는 공유 잠금 장치, 독점 잠금, 의도 잠금 장치, 레코드 잠금, 갭 잠금 및 다음 키 잠금 장치가 포함됩니다. 1. 공유 잠금을 사용하면 다른 트랜잭션을 읽지 않고 트랜잭션이 데이터를 읽을 수 있습니다. 2. 독점 잠금은 다른 트랜잭션이 데이터를 읽고 수정하는 것을 방지합니다. 3. 의도 잠금은 잠금 효율을 최적화합니다. 4. 레코드 잠금 잠금 인덱스 레코드. 5. 갭 잠금 잠금 장치 색인 기록 간격. 6. 다음 키 잠금은 데이터 일관성을 보장하기 위해 레코드 잠금과 갭 잠금의 조합입니다.

MySQL 쿼리 성능이 좋지 않은 주된 이유는 인덱스 사용, 쿼리 최적화에 의한 잘못된 실행 계획 선택, 불합리한 테이블 디자인, 과도한 데이터 볼륨 및 잠금 경쟁이 포함됩니다. 1. 색인이 느리게 쿼리를 일으키지 않으며 인덱스를 추가하면 성능이 크게 향상 될 수 있습니다. 2. 설명 명령을 사용하여 쿼리 계획을 분석하고 Optimizer 오류를 찾으십시오. 3. 테이블 구조를 재구성하고 결합 조건을 최적화하면 테이블 설계 문제가 향상 될 수 있습니다. 4. 데이터 볼륨이 크면 분할 및 테이블 디비전 전략이 채택됩니다. 5. 높은 동시성 환경에서 거래 및 잠금 전략을 최적화하면 잠금 경쟁이 줄어들 수 있습니다.

데이터베이스 최적화에서 쿼리 요구 사항에 따라 인덱싱 전략을 선택해야합니다. 1. 쿼리에 여러 열이 포함되고 조건 순서가 수정되면 복합 인덱스를 사용하십시오. 2. 쿼리에 여러 열이 포함되어 있지만 조건 순서가 고정되지 않은 경우 여러 단일 열 인덱스를 사용하십시오. 복합 인덱스는 다중 열 쿼리를 최적화하는 데 적합한 반면 단일 열 인덱스는 단일 열 쿼리에 적합합니다.

MySQL 느린 쿼리를 최적화하려면 SlowQueryLog 및 Performance_Schema를 사용해야합니다. 1. SlowQueryLog 및 Set Stresholds를 사용하여 느린 쿼리를 기록합니다. 2. Performance_schema를 사용하여 쿼리 실행 세부 정보를 분석하고 성능 병목 현상을 찾고 최적화하십시오.

MySQL 및 SQL은 개발자에게 필수적인 기술입니다. 1.MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템이며 SQL은 데이터베이스를 관리하고 작동하는 데 사용되는 표준 언어입니다. 2.MYSQL은 효율적인 데이터 저장 및 검색 기능을 통해 여러 스토리지 엔진을 지원하며 SQL은 간단한 문을 통해 복잡한 데이터 작업을 완료합니다. 3. 사용의 예에는 기본 쿼리 및 조건 별 필터링 및 정렬과 같은 고급 쿼리가 포함됩니다. 4. 일반적인 오류에는 구문 오류 및 성능 문제가 포함되며 SQL 문을 확인하고 설명 명령을 사용하여 최적화 할 수 있습니다. 5. 성능 최적화 기술에는 인덱스 사용, 전체 테이블 스캔 피하기, 조인 작업 최적화 및 코드 가독성 향상이 포함됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
