데이터 베이스 MySQL 튜토리얼 mysql性能tip(1)_MySQL

mysql性能tip(1)_MySQL

Jun 01, 2016 pm 01:44 PM
사용

bitsCN.com

数据类型选择方面的几个原则:

 

1,更小通常更好,选择能正确表示数据的最小类型。

 

2,简单就好,用简单类型优于用复杂类型。

 

3,避免NULL,尽量定义字段为not null。性能提升很小。

 

 

 

字符串的选型:

 

当最大长度远远大于平均长度时,并很少发生更新时,选择VARCHAR。

 

CHAR适合保存用户密码的MD5哈希值。

 

MySql存储的最小时间单位是秒,但是可以用毫秒进行临时计算。

 

 

 

InnoDB有一个特别功能叫做自适应哈希索引,当InnoDB注意到一些索引值被很频繁的访问的时候,它就会在BTree的顶端为这些值建立内存索引。

 

 

 

索引包含了来自于表中的一列或者多列的值,如果索引了多列数据,列的顺序非常重要,因为Mysql只能高效的搜索所以你的最左前缀。

 

 

 

聚集索引:不是一种单独的索引类型,而是一种存储数据的方式。当表有聚集索引的时候,它的数据行实际保存在索引的叶子页中。每个表只能有一个聚集索引。

 

使用时注意设置前缀索引。索引选择要注意不重复的索引值。

 

 

 

索引策略总结:

 

检查最常用的查询,不要不调查就随便建索引。为了找到建索引的平衡,应该测试和剖析。第一检查的就是响应时间,要为耗时很长的查询添加索引;然后就是检查导致最大负载的查询,添加索引;最好要把系统的cpu、内存和磁盘瓶颈考虑进去。

 

在任何可能的地方,都要试着扩展索引,而不是新增索引。通常维护一个多列索引要比维护多个单列索引容易。如果不知道查询的分布,就要尽可能的使索引变得更有选择性,因为高选择性的索引通常更有好处。

 

 

 

在冗余方面:

 

通常需要额外的索引、冗余的字段,或者甚至缓存表和汇总表来加速读取。这为写入查询和维护工作增加了工作量,但这仍然是设计高性能查询的常见技巧:用极大的加速读取来弥补较慢的写入的代价。(但是也为读写增加了开发复杂性)

 

 

 

InnoDB存储引擎的一些tip:

 

 

事务性:支持事务和四种事务隔离级别。

 

外键:在Mysql 5.0中唯一的支持外键的存储引擎。

 

行级锁:锁设定于行一级,不会向上传递并且也不会阻塞选择——标准选择根本不会设定任何锁,有很好的并发特性。

 

多版本:InnoDB使用多版本并发控制,默认情况下不会选择读取陈旧数据。

 

按主键聚集:所有InnoDB表都是按主键聚集的。

 

所有索引包含主键列:索引按照主键引用行,因此,如果不把主键维持的很短,索引就会很大。

 

优化的缓存:InnoDB把数据和内存缓存在缓冲区池里。会自动构建哈希索引来加快行读取。

 

未压缩的索引:索引没有使用前缀压缩,因此可能会比MyISAM表的索引大很多。

 

数据装载缓慢:在MySql5.0中,InnoDB不会特别优化数据加载。它一次构建一行的索引,而不是按照排序进行构建。导致加载缓慢。

 

阻塞AUTO_INCREMENT:在MySql5.1之前的版本,InnoDB使用了表级锁来产生每个新的auto_increment值。

 

没有缓存的count(*)值:和MyISAM表或Memory表不同,InnoDB表不会把表的行数保存在表中,这意味着没有where子句的count(*)查询不会被优化掉,并且需要全表或索引扫描。

 

 

查询优化:

 

在下面的应用场景中,在应用程序端进行联接效率更高:可以缓存早期查询的大量数据;使用了多个MyISAM表;数据分布在不同的服务器上;对于大表使用in()替换联接;一个联接引用了同一个表很多次。

 

 

 

查询缓存:Mysql对查询缓存的实现就是将查询文本作为key,将结果集作为value的一个map。因此,查询语句的任何一点变化都会导致缓存不命中,书写一致的查询语句就成了mysql操作的要点。另外就是查询缓存不缓存任何包含不确定函数的查询,比如NOW()。换句话说,用户自定义的函数,变量等等都不会被缓存。(原理是这样的,服务器会执行一次不区分大小写的检查来验证查询是否以SEL打头)。另外值得说明的是,结果太大也不会被缓存的。建立缓存也是有开销的,比如内存分配等,开启了缓存后查询就会检查,这也是性能开销,因此开启与否要根据情况仔细斟酌

 

摘自 Change Dir

bitsCN.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 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 Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP에서 int형을 문자열로 변환하는 방법에 대한 자세한 설명 PHP에서 int형을 문자열로 변환하는 방법에 대한 자세한 설명 Mar 26, 2024 am 11:45 AM

PHP에서 int 유형을 문자열로 변환하는 방법에 대한 자세한 설명 PHP 개발에서 int 유형을 문자열 유형으로 변환해야 하는 경우가 종종 있습니다. 이 변환은 다양한 방법으로 수행할 수 있습니다. 이 기사에서는 독자의 이해를 돕기 위해 특정 코드 예제와 함께 몇 가지 일반적인 방법을 자세히 소개합니다. 1. PHP 내장 함수 strval()을 사용하세요. PHP는 다양한 유형의 변수를 문자열 유형으로 변환할 수 있는 내장 함수 strval()을 제공합니다. int형을 string형으로 변환해야 할 때,

Golang에서 문자열이 특정 문자로 시작하는지 확인하는 방법은 무엇입니까? Golang에서 문자열이 특정 문자로 시작하는지 확인하는 방법은 무엇입니까? Mar 12, 2024 pm 09:42 PM

Golang에서 문자열이 특정 문자로 시작하는지 확인하는 방법은 무엇입니까? Golang으로 프로그래밍할 때 문자열이 특정 문자로 시작하는지 확인해야 하는 상황에 자주 직면하게 됩니다. 이 요구 사항을 충족하기 위해 Golang의 문자열 패키지에서 제공하는 기능을 사용할 수 있습니다. 다음에는 Golang을 사용하여 문자열이 특정 문자로 시작하는지 확인하는 방법을 구체적인 코드 예제와 함께 자세히 소개하겠습니다. Golang에서는 strings 패키지의 HasPrefix를 사용할 수 있습니다.

Golang 문자열이 지정된 문자로 끝나는지 확인하는 방법 Golang 문자열이 지정된 문자로 끝나는지 확인하는 방법 Mar 12, 2024 pm 04:48 PM

제목: Golang에서 문자열이 특정 문자로 끝나는지 확인하는 방법 Go 언어에서는 문자열을 처리할 때 문자열이 특정 문자로 끝나는지 확인해야 하는 경우가 있습니다. 이 기사에서는 Go 언어를 사용하여 이 기능을 구현하는 방법을 소개하고 참조용 코드 예제를 제공합니다. 먼저 Golang에서 문자열이 지정된 문자로 끝나는지 확인하는 방법을 살펴보겠습니다. Golang의 문자열에 포함된 문자는 인덱싱을 통해 얻을 수 있으며, 문자열의 길이는 다음과 같습니다.

python_python 반복 문자열 튜토리얼에서 문자열을 반복하는 방법 python_python 반복 문자열 튜토리얼에서 문자열을 반복하는 방법 Apr 02, 2024 pm 03:58 PM

1. 먼저 pycharm을 열고 pycharm 홈페이지로 들어갑니다. 2. 그런 다음 새 Python 스크립트를 생성하고 마우스 오른쪽 버튼을 클릭하고 새로 만들기를 클릭한 후 Pythonfile을 클릭합니다. 3. 문자열(코드: s="-")을 입력합니다. 4. 그런 다음 문자열의 기호를 20번 반복해야 합니다(코드: s1=s*20). 5. 인쇄 출력 코드(코드: print(s1))를 입력합니다. 6. 마지막으로 스크립트를 실행하면 하단에 반환 값이 표시됩니다. - 20번 반복됩니다.

PHP에서 16진수를 문자열로 변환할 때 중국어 문자가 깨지는 문제를 해결하는 방법 PHP에서 16진수를 문자열로 변환할 때 중국어 문자가 깨지는 문제를 해결하는 방법 Mar 04, 2024 am 09:36 AM

PHP에서 16진수 문자열을 변환할 때 중국어 문자가 깨지는 문제를 해결하는 방법 PHP 프로그래밍에서 때때로 16진수 문자열을 일반 중국어 문자로 변환해야 하는 상황에 직면합니다. 그러나 이러한 변환 과정에서 때때로 중국어 문자가 깨져 나오는 문제에 직면하게 됩니다. 이 기사에서는 PHP에서 16진수를 문자열로 변환할 때 중국어 문자가 깨지는 문제를 해결하는 방법과 구체적인 코드 예제를 제공합니다. 16진수 변환을 위해서는 hex2bin() 함수를 사용하세요. PHP에 내장된 hex2bin() 함수는 1을 변환할 수 있습니다.

PHP 문자열 일치 팁: 모호한 포함 표현식을 피하세요 PHP 문자열 일치 팁: 모호한 포함 표현식을 피하세요 Feb 29, 2024 am 08:06 AM

PHP 문자열 일치 팁: 모호한 포함 표현식 방지 PHP 개발에서 문자열 일치는 일반적으로 특정 텍스트 내용을 찾거나 입력 형식을 확인하는 데 사용되는 일반적인 작업입니다. 그러나 일치 정확도를 보장하기 위해 모호한 포함 표현식을 사용하지 말아야 할 경우도 있습니다. 이 기사에서는 PHP에서 문자열 일치를 수행할 때 모호한 포함 표현식을 방지하는 몇 가지 기술을 소개하고 구체적인 코드 예제를 제공합니다. 정확한 일치를 위해 preg_match() 함수를 사용하십시오. PHP에서는 preg_mat를 사용할 수 있습니다.

PHP 문자열 조작: 공백을 효과적으로 제거하는 실용적인 방법 PHP 문자열 조작: 공백을 효과적으로 제거하는 실용적인 방법 Mar 24, 2024 am 11:45 AM

PHP 문자열 작업: 공백을 효과적으로 제거하는 실용적인 방법 PHP 개발 시 문자열에서 공백을 제거해야 하는 상황에 자주 직면하게 됩니다. 공백을 제거하면 문자열이 더 깔끔해지고 후속 데이터 처리 및 표시가 쉬워집니다. 이 기사에서는 공백을 제거하는 몇 가지 효과적이고 실용적인 방법을 소개하고 구체적인 코드 예제를 첨부합니다. 방법 1: PHP 내장 함수인 Trim()을 사용합니다. PHP 내장 함수인 Trim()을 사용하면 문자열 양쪽 끝의 공백(공백, 탭, 개행 등 포함)을 제거할 수 있어 매우 편리하고 쉽습니다. 사용.

문자열의 마지막 두 문자를 삭제하는 PHP 기술 문자열의 마지막 두 문자를 삭제하는 PHP 기술 Mar 23, 2024 pm 12:18 PM

웹 애플리케이션 개발에 널리 사용되는 스크립팅 언어로서 PHP는 매우 강력한 문자열 처리 기능을 가지고 있습니다. 일상적인 개발 과정에서 문자열, 특히 문자열의 마지막 두 문자를 삭제해야 하는 작업을 자주 접하게 됩니다. 이 기사에서는 문자열의 마지막 두 문자를 삭제하는 두 가지 PHP 기술을 소개하고 구체적인 코드 예제를 제공합니다. 팁 1: substr 함수 사용 PHP의 substr 함수는 문자열의 일부를 반환하는 데 사용됩니다. 문자열과 시작 위치를 지정하여 쉽게 문자를 제거할 수 있습니다.

See all articles