php教程 php手册 mysql 高性能

mysql 高性能

Jun 06, 2016 pm 08:14 PM
mysql 아니요 성격 바이트 수 정의 길이 고성능

1.字符串的长度定义不是字节数是字符数(char, varchar) 2.二进制字符串存储的是字节码不是字符(binary,varbinary \0填充,检索时不会去掉填充值) 3.字符串类型作为标识列,不太理想,因为它们消耗空间,并且通常比数字类型慢 4.myisam 对字符串使用压缩索引,会导

1.字符串的长度定义不是字节数是字符数(char, varchar)

2.二进制字符串存储的是字节码不是字符(binary,varbinary \0填充,检索时不会去掉填充值)

3.字符串类型作为标识列,不太理想,因为它们消耗空间,并且通常比数字类型慢

4.myisam 对字符串使用压缩索引,会导致查询慢

5.适当的冗余

6.innodb 使用的是B+tree(每一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历)

7.只有当索引帮助存储引擎快速查找到记录的好处大于其带来的额外工作的时候,索引才是有效的.

8.前缀索引, 比值为(0.0312)是相对合适的

9.innodb 没有主键索引,会有一个唯一的非空索引代替,不然就会隐式定义一个主键来作为聚簇索引,

10.二级索引(非聚簇索引) 可能比想象的更大,因为在二级索引的叶子节点包含了引用行的主键列

11.二级索引访问需要两次索引查找,而不是一次(二级索引的叶子节点保存的不是指向航的物理位置的指针而是行的主键值)(innodb 自适应哈希索引可以减少这样的重复工作)

12.innodb 在二级索引上使用共享(读,s)锁 ,但是访问主键索引需要排他(写)锁.

13.check table

14.优化是否请求了不需要的数据;多次查询相同的数据

15.衡量查询开销:响应时间(服务时间+排队时间),扫描行数,返回的行数(mysql 慢日志查询)

16.explain 的时候 Extra=using index 表示用了覆盖索引(包含了所有满足查询需要的数据的索引称为覆盖索引(covering index)

17.分解关联查询

18.mysql 客户端和服务器之间的通信协议是半双工的,意味着在任何一个时刻,要么是服务器像客户端发送数据,要么是客户端向服务器发送数据,这两个动作不能同时发生.

19.查询语句很长的时候:max_allowed_packet

20.php 的 mysql_query()将结果集缓存到了内存中,mysql_unbuffered_query()不会将结果集缓存到内存中.

21.查看当前状态:show full processlist;

sleep 线程正在等待客户端发送新的请求                                                                                
query 线程正在执行查询或者正在将结果发送给客户端                                                                    
locked 该线程正在等待表锁                                                                                           
analyzing and statistics 线程咋横在收集存储引擎的统计信息,并生成查询的执行计划                                      
copying to tmp table [on disk] 线程正在执行查询,将结果集复制到临时表中                                              
sorting result 线程对结果集进行排序  
sending data :线程可能在多个状态之间传送数据,或者在生成结果集,或者在向客户端发送数据                                
로그인 후 복사

22.mysql 中 In并不完全等同于 or, mysql将 in 列表中的数据先进行排序,然后通过二分查找的方式来确定列表中的值是否满足条件,这是一个 o(log N)的复杂度的操作,等价的转换成 or查询的复杂度>

23.explain extended select …; show warnings;自己试试,

24.分区表:
进行 insert,update,delete,select 查询时都会先打开并锁住所有的底层表,在相应的底层表中进行操作..
25.分区表类型:
partition分区字句中可以使用各种函数,但是有一个要求,表达式的返回值要是一个确定的整数,且不能是一个常数.
键值分区,哈希分区,列表分区

注意: 在数据量超大的时候,B-tree 索引就无法起作用,除非是索引覆盖查询,否则数据库服务器需要根据索引扫描的结果回表,查询所有符合条件的记录.

26.分区策略:
全量扫描数据,不要任何索引:根据分区的规则大致定位需要的数据位置,只要能够使用 where 条件,将需要的数据限制在少数分区中,则效率是很高的.
索引数据,并分离热点:数据有明显的热点,除了这部分其他的很少访问,就可以将热点数据单独放在一个分区,让它有机会缓存到内存.

27.分区策略重要的假设:
查询能够过滤掉很多额外的分区
分区本身并不会带来很多额外的代价
导致出现问题的状况:
1.null 值会使分区过滤无效
2.分区列和索引列不匹配
3.选择分区的成本可能很高
4.打开并锁住所有底层表的成本可能很高
5.维护分区的成本很高

28.分区限制:

1.所有分区都必须使用相同的存储引擎
2.分区函数中可以使用的函数和表达式也有限制
3.某些存储引擎不支持分区
4.myisam 分区,不能在使用 load index into cache 操作
5.myisam,使用分区表时,需要打开更多的文件描述符
로그인 후 복사

dht:distributed hash table 分布式哈希表

29,合并表 略

30.视图

5.0之后引入视图
合并算法(尽可能的使用);临时表算法
视图中包含了 group by,distinct,任何聚合函数,union,子查询等,
    只要无法在原表记录和视图简建立一一映射的场景,mysql 都将使用临时表算法来实现试图
针对视图:select * from view_name; select_type deriver 表示采用了采用了临时表算法实现
使用临时表算法实现的视图都无法被更新
mysql 不允许在视图上创建任何触发器
innodb 外键约束
로그인 후 복사

31.mysql 允许通过触发器,存储过程,函数的形式存储代码. 存储过程和存储函数都被同称为存储程序

存储过程,触发器,游标
在存储程序中保留注释
绑定变量
用户自定义函数
로그인 후 복사

32.插件
存储过程插件,后台插件,information_schema,全文解析插件,审计插件,认证插件,

33.字符集和校对

创建时,默认设置;
服务器和客户端通信时设置 客户端按照 character_set_client传输数据和 sql
服务器接收时,转换, character_set_connection
服务器返回错误信息 character_set_result
로그인 후 복사

34.load data infile 数据库总是将文件中的字符集按照 character_set_database 解析,可以使用子句 character set 来设定字符集

35.select info outfield 的结果集不做任何转码的写入文件

36.不同字符集和校对规则之间的转换,可能会带来额外的系统开销

37.全文索引:支持对各种字符内容的搜索,(char, carchar,test)也支持自然语言搜索和不尔搜索

38.分布式(xa)事务;内部xa 事务,外部 xa 事务

39.查询缓存
mysql 命中缓存:缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包含了查询本身,当前要查询的数据库,客户端协议的版本等.

如果查询中包含了一个不确定的函数,mysql 是不会检查查询缓存的.
로그인 후 복사

40,查询缓存存放在内存:
当有查询结果需要缓存的时候,mysql 会从大的空间块中申请一个数据块用于存储结果,这个数据块需要大于 query_cache_min_res_unit 的配置,即使查询结果小于这个,仍然至少需要这个参数的空间

缓存碎片,内存不足,数据修改都会造成缓存的失效
로그인 후 복사

41.配置和维护查询缓存:
query_cache_type,query_cache_size,query_cache_min_res_unit,query_cache_limit,
query_cache_wlock_invalidate,

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

PHP의 빅데이터 구조 처리 능력 PHP의 빅데이터 구조 처리 능력 May 08, 2024 am 10:24 AM

빅 데이터 구조 처리 기술: 청킹(Chunking): 데이터 세트를 분할하고 청크로 처리하여 메모리 소비를 줄입니다. 생성기: 전체 데이터 세트를 로드하지 않고 데이터 항목을 하나씩 생성하므로 무제한 데이터 세트에 적합합니다. 스트리밍: 파일을 읽거나 결과를 한 줄씩 쿼리하므로 대용량 파일이나 원격 데이터에 적합합니다. 외부 저장소: 매우 큰 데이터 세트의 경우 데이터를 데이터베이스 또는 NoSQL에 저장합니다.

PHP에서 MySQL 백업 및 복원을 사용하는 방법은 무엇입니까? PHP에서 MySQL 백업 및 복원을 사용하는 방법은 무엇입니까? Jun 03, 2024 pm 12:19 PM

PHP에서 MySQL 데이터베이스를 백업하고 복원하는 작업은 다음 단계에 따라 수행할 수 있습니다. 데이터베이스 백업: mysqldump 명령을 사용하여 데이터베이스를 SQL 파일로 덤프합니다. 데이터베이스 복원: mysql 명령을 사용하여 SQL 파일에서 데이터베이스를 복원합니다.

PHP에서 MySQL 쿼리 성능을 최적화하는 방법은 무엇입니까? PHP에서 MySQL 쿼리 성능을 최적화하는 방법은 무엇입니까? Jun 03, 2024 pm 08:11 PM

선형 복잡성에서 로그 복잡성까지 조회 시간을 줄이는 인덱스를 구축하여 MySQL 쿼리 성능을 최적화할 수 있습니다. SQL 삽입을 방지하고 쿼리 성능을 향상하려면 PREPAREDStatements를 사용하세요. 쿼리 결과를 제한하고 서버에서 처리되는 데이터의 양을 줄입니다. 적절한 조인 유형 사용, 인덱스 생성, 하위 쿼리 사용 고려 등 조인 쿼리를 최적화합니다. 쿼리를 분석하여 병목 현상을 식별하고, 캐싱을 사용하여 데이터베이스 로드를 줄이고, 오버헤드를 최소화합니다.

PHP를 사용하여 MySQL 테이블에 데이터를 삽입하는 방법은 무엇입니까? PHP를 사용하여 MySQL 테이블에 데이터를 삽입하는 방법은 무엇입니까? Jun 02, 2024 pm 02:26 PM

MySQL 테이블에 데이터를 삽입하는 방법은 무엇입니까? 데이터베이스에 연결: mysqli를 사용하여 데이터베이스에 대한 연결을 설정합니다. SQL 쿼리 준비: 삽입할 열과 값을 지정하는 INSERT 문을 작성합니다. 쿼리 실행: query() 메서드를 사용하여 삽입 쿼리를 실행하면 확인 메시지가 출력됩니다.

PHP를 사용하여 MySQL 테이블을 만드는 방법은 무엇입니까? PHP를 사용하여 MySQL 테이블을 만드는 방법은 무엇입니까? Jun 04, 2024 pm 01:57 PM

PHP를 사용하여 MySQL 테이블을 생성하려면 다음 단계가 필요합니다. 데이터베이스에 연결합니다. 데이터베이스가 없으면 작성하십시오. 데이터베이스를 선택합니다. 테이블을 생성합니다. 쿼리를 실행합니다. 연결을 닫습니다.

PHP에서 MySQL 저장 프로시저를 사용하는 방법은 무엇입니까? PHP에서 MySQL 저장 프로시저를 사용하는 방법은 무엇입니까? Jun 02, 2024 pm 02:13 PM

PHP에서 MySQL 저장 프로시저를 사용하려면: PDO 또는 MySQLi 확장을 사용하여 MySQL 데이터베이스에 연결합니다. 저장 프로시저를 호출하는 문을 준비합니다. 저장 프로시저를 실행합니다. 결과 집합을 처리합니다(저장 프로시저가 결과를 반환하는 경우). 데이터베이스 연결을 닫습니다.

MySQL 8.4에서 mysql_native_password가 로드되지 않음 오류를 수정하는 방법 MySQL 8.4에서 mysql_native_password가 로드되지 않음 오류를 수정하는 방법 Dec 09, 2024 am 11:42 AM

MySQL 8.4(2024년 최신 LTS 릴리스)에 도입된 주요 변경 사항 중 하나는 "MySQL 기본 비밀번호" 플러그인이 더 이상 기본적으로 활성화되지 않는다는 것입니다. 또한 MySQL 9.0에서는 이 플러그인을 완전히 제거합니다. 이 변경 사항은 PHP 및 기타 앱에 영향을 미칩니다.

오라클 데이터베이스와 mysql의 차이점 오라클 데이터베이스와 mysql의 차이점 May 10, 2024 am 01:54 AM

Oracle 데이터베이스와 MySQL은 모두 관계형 모델을 기반으로 하는 데이터베이스이지만 호환성, 확장성, 데이터 유형 및 보안 측면에서 Oracle이 우수하고, MySQL은 속도와 유연성에 중점을 두고 중소 규모 데이터 세트에 더 적합합니다. ① Oracle은 광범위한 데이터 유형을 제공하고, ② 고급 보안 기능을 제공하고, ③ 엔터프라이즈급 애플리케이션에 적합하고, ① MySQL은 NoSQL 데이터 유형을 지원하고, ② 보안 조치가 적고, ③ 중소 규모 애플리케이션에 적합합니다.

See all articles