목차
设计合理的数据表结构
索引建立原则
编写高效的SQL
常用技巧分享
Select查询速度
데이터 베이스 MySQL 튜토리얼 MYSQL数据库优化的建议_MySQL

MYSQL数据库优化的建议_MySQL

Jun 01, 2016 pm 01:10 PM

设计合理的数据表结构

1:选择合适的数据类型,如果能定长,尽量定长
2:不要使用无法加索引的类型为关键字段,比如text类型
3:为了避免联表查询,有时候可以适当的数据冗余,比如邮箱,名字这些不容易更改的数据
4:选择合适的表引擎,有时候MyISANM适合,有时候InnoDB适合,
5:为了保证查询性能,最好保证每个表建立auto_increatment字段,建立合适的数据库索引
6:最好给每个字段都设置default值

索引建立原则

1:一般针对数据分散的关键字进行建立索引,比如ID,QQ,像性别,状态值建立索引没有意义。
2:尽量使用短索引,一般对int,char/varchar.date/time等类型的字段建立索引
3:需要的时候建立联合索引,但是要注意查询SQL语句的编写
4:一般建议每条记录最好有一个能够快速定位独一无二定位的唯一标识(索引)、
5:不要过度索引,单表建立的索引不要超过5个,负责更新索引很耗时

编写高效的SQL

1:能够快速缩小结果集的where条件写在前面,如果有恒量条件也尽量放在前面。
2:尽量避免group by,distinct,in,or等语句的使用,避免使用联表查询和子查询,因为将使执行效率大大下降。
3:能够使用索引的字段尽量进行合理的有效排列,如果使用了联合索引,请注意提取字段的前后顺序。
4:针对索引字段使用,大小等的比较,if null 和between 将会使用索引,使用like 'abc%'将能够使用索引,
5:如果在SQL中使用了MySQL的部分自带函数,索引将失效,同时将无法使用MYSQL的query Cache,比如letf(),SUBSTR().TO_DAYS(),DATE_FORMAT()等,如果使用了OR或者In,索引也将失效。

常用技巧分享

1:使用 SHOW PROCESSLIST来查看当前MYSQL服务器线程的执行情况,是否锁表,查看相应的SQL语句。
2:设置 my.ini中的long-query-time和log-slow-queries能够记录服务器中那些SQL执行较慢,
3:使用DESC TABLE xxx来查看表结构,使用SHOW INDEX FROM xxx来查看表索引。
4:使用LAOD DATA倒入数据比INSERT INTO快多了。
5:SELECT count() From Tbl在你InnoDb中要扫描整个表来计算有多少行,但是MyISAM只要简单的读取保存好的行数即可,注意的是,当count()语句包含where条件时,两种表的操作是一样的。

Select查询速度

要想是一个较慢的select where更快,应首先检查是否能够增加一个索引,你可以使用explain语句来确定select语句使用那些索引。
为了帮助MySQL更好的优化查询,在一个装载数据后的表上运行 ANALYZE TABLE或myisamchk –analyze。这样为每一个索引更新指出有相同值得行的平均行数的值,(当然,如果只有一个索引,这总是1),Mysql采用这种方式来决定当你连接两个基于非常量表达式的表时,该采用哪个索引,你可以使用SHOW INDEX FROM tbl_name并检查cardinality值来检查表,分析结果

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

Docker에서 MySQL 메모리 사용을 줄입니다 Docker에서 MySQL 메모리 사용을 줄입니다 Mar 04, 2025 pm 03:52 PM

Docker에서 MySQL 메모리 사용을 줄입니다

Alter Table 문을 사용하여 MySQL에서 테이블을 어떻게 변경합니까? Alter Table 문을 사용하여 MySQL에서 테이블을 어떻게 변경합니까? Mar 19, 2025 pm 03:51 PM

Alter Table 문을 사용하여 MySQL에서 테이블을 어떻게 변경합니까?

MySQL의 문제를 해결하는 방법 공유 라이브러리를 열 수 없습니다. MySQL의 문제를 해결하는 방법 공유 라이브러리를 열 수 없습니다. Mar 04, 2025 pm 04:01 PM

MySQL의 문제를 해결하는 방법 공유 라이브러리를 열 수 없습니다.

Linux에서 MySQL을 실행합니다 (Phpmyadmin이있는 Podman 컨테이너가 포함되지 않음) Linux에서 MySQL을 실행합니다 (Phpmyadmin이있는 Podman 컨테이너가 포함되지 않음) Mar 04, 2025 pm 03:54 PM

Linux에서 MySQL을 실행합니다 (Phpmyadmin이있는 Podman 컨테이너가 포함되지 않음)

sqlite 란 무엇입니까? 포괄적 인 개요 sqlite 란 무엇입니까? 포괄적 인 개요 Mar 04, 2025 pm 03:55 PM

sqlite 란 무엇입니까? 포괄적 인 개요

MacOS에서 여러 MySQL 버전을 실행 : 단계별 가이드 MacOS에서 여러 MySQL 버전을 실행 : 단계별 가이드 Mar 04, 2025 pm 03:49 PM

MacOS에서 여러 MySQL 버전을 실행 : 단계별 가이드

인기있는 MySQL GUI 도구는 무엇입니까 (예 : MySQL Workbench, Phpmyadmin)? 인기있는 MySQL GUI 도구는 무엇입니까 (예 : MySQL Workbench, Phpmyadmin)? Mar 21, 2025 pm 06:28 PM

인기있는 MySQL GUI 도구는 무엇입니까 (예 : MySQL Workbench, Phpmyadmin)?

MySQL 연결에 대한 SSL/TLS 암호화를 어떻게 구성합니까? MySQL 연결에 대한 SSL/TLS 암호화를 어떻게 구성합니까? Mar 18, 2025 pm 12:01 PM

MySQL 연결에 대한 SSL/TLS 암호화를 어떻게 구성합니까?

See all articles