PHP经典面试题——数据库优化

article/2025/10/17 3:00:39
Mysql数据库优化

        PHP学习过程中或者面试过程中少不了的一个重要知识点,那就是关于数据库的优化问题,本人经过查阅资料并验证,总结了几点比较浅层的数据库优化方法,小白可以参考,大神勿喷。

        忘了什么时候发现的一张关于Mysql数据库优化的梯形图了,一直收藏着,感觉很有道理:

        从图中可以很明显的看出Mysql数据库优化的常用方法以及成本的高低。sql语句的优化和索引的优化是成本最小但是效果最好的方法,关于这两点我总结了如下几个优化方法:

        1.sql语句中不使用子查询,比如delete from user where uid not in( select id from order),因为使用子查询数据库要在内存中建立临时表,消耗资源,如果两个表有关联并且经常被一块调用,最好是在一张表中建立另一张表的外键用join语句查询,比如:delete from user left join order on user.id=order.uid;

        2.sql语句中最好不要出现*来代替已知字段,即使是要查询所有字段也要写出每一个字段,因为用*代替字段数据库要先查询出表中有哪些字段再进行sql语句的查询,无形中又多了一次无意义的查询工作;

        3.建立索引

                3.1索引可以非常大程度加快数据库检索速度,尤其是在where和join中出现的列或者用Order by排序的时候速度更是快很多(需要判断或者比较或者排序的时候);

                3.2索引大类分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇  索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快;

                3.3但是建立索引并不是越多越好,过多索引会造成冗余,因为每一次delete、update、add都会刷新一次索引,过多索引造成其他操作消耗过多资源,过小的表也没必要建立索引,没人见过两页的宣传单页还有目录的对吧。

        第二重要的就是表结构优化,关于这方面也有以下几点简单总结:

        1. 选择最合适的字段属性,使用可以存在数据的最小的数据类型,例如邮政编码,手机号码这类定长的数字可以用char(6),char(11);性别或者是否这种判断性文字可以用tinyint;字段属性尽量为not null这样不用判断是否为空,减少一个步骤(用其他方式表达你想表达的NULL,比如 -1);如果一定要用text这种类型,最好是采用分表存储;

        2.将常用信息和不常用信息分表存储,比如一个商城网站的用户表,用户的昵称,头像,密码,账号这类字段用户登录就会用到,而用户的兴趣爱好了,喜欢的颜色了这种字段就分表存储,相信大家京东账号中的个人信息可能也就在注册的时候打开过,以后就再没注意过了吧。


    其它关于分库分表,负载均衡了集群和分布式了本小白还没接触过,需要的同学查阅其它资料哈!







http://chatgpt.dhexx.cn/article/SN7Tew8G.shtml

相关文章

数据库_EXPLAIN(查询性能优化)

文章目录 前言一、EXPLAIN是什么?二、有什么用?三、Explain 的每个字段3.1、id(必记住)3.2、select_type 3.3、table3.4、type(必记住)3.5、possible_keys3.6、key3.7、key_len3.8、ref3.9、rows(记)filter…

数据库性能优化之分布式数据库结构设计优化(一)

Gauss是MPP数据库,MPP指大规模并行处理架构,在非共享集群中,各独立节点通过网络进行数据通信协同计算,非共享集群有完全可伸缩性、高可用、高性能等优势。Gauss采用了Share Nothing架构,即集群各节点相互独立有独立内存…

数据库优化之索引

一、什么是索引 索引是对数据库表中一列或多列的值进行排序的一种结构数据,使用索引可快速访问数据库表中的特定信息。 数据库索引是创建在表的某列上的,并且存储了这一列的所有值。同时存储了指向表中的相应行的指针。 二、索引的分类 唯一索引 唯一…

数据库性能优化方案

数据库优化方案 前言数据库性能优化方案SQL 调优表结构优化硬件优化架构优化分库分表详解分库单应用单数据库多应用单数据库多应用多数据库 分表水平拆分和垂直拆分单库内拆分和多库拆分 分库分表带来的复杂性跨库关联查询分布式事务排序、分页、函数计算问题分布式 ID多数据源…

Escaping closure captures non-escaping parameter 'xx'

新版的Swift闭包做参数默认是noescaping,不再是escaping。 如果函数里执行该闭包,要添加escaping。

Escaping closure captures non-escaping parameter ‘findPeripheral‘

文章目录 1.问题2.原因和解决参考连接 1.问题 2.原因和解决 逃逸闭包前面没有加escaping关键字,加上就可以了,如下图 参考连接 stack overflow 官方文档:Escaping Closures

[plugin:commonjs] Unexpected ‘/‘. Escaping special characters with \ may help.错误分析

错误原因:样式表里使用了//作注释 解决办法:把‘//tab样式’去掉就可以了 补充:css中注释使用‘/**/’

swift3.0中@escaping 和 @noescape 的含义

swift3.0中escaping 和 noescape 的含义 开始用swift语言是很容易的,而且它确实是一门很吸引人的语言。但是随着你频繁的使用,你会逐渐接触到swift更加复杂的结构. 在swift2中,你可能遇到过noescape属性,你有没有花一点时间去理解…

SwiftUI 内功之 ViewBuilder 和escaping 组合使用传递View (教程含源码)

实战需求 SwiftUI 内功之 ViewBuilder 和escaping 组合使用传递View 本文价值与收获 看完本文后,您将能够作出下面的界面 看完本文您将掌握的技能 ViewBuilderescaping基础知识 ViewBuilder 一个自定义参数属性,用于从闭包构造视图。 struct ViewBuilder总览 您通常将…

quote mysql_【原创】11. MYSQL++ 之 Quoting 与 Escaping

1. 综述 其实一看到这两个单词的时候我有点莫名其妙,可能英语没有学好,我的理解就是quoting是“引用”的意思,而Escaping是“逃脱”的意思。后来在看到了作者的TUTORIAL之后才大致明白了两者的意思。 QUOTING大白话就是为SQL语句打上单引号。…

错误日志:Syntax Error: Error: Unexpected ‘/‘. Escaping special characters with \ may help.

在运行Vue项目的时候出现错误: ERROR Failed to compile with 1 error 9:55:33error in ./src/components/index/SimpleHeader/index.vue?vue&t…

swift_041(Swift的@noescape和@escaping)

noescape在swift3.0中已经被废弃,在swift3.0中noescape被用作一个默认值。 escaping属性写在参数类型的前面而不是参数名称的前面。这是swift3里一个新的点。 这里需要先介绍一下escape的概念。当一个闭包当做一个参数传进函数里,这个闭包是在这个函数执…

swift函数参数指针传递inout和@escaping冲突的解决方法

这里写目录标题 需求解决方法容易产生的问题总结 今天深入解决关于函数参数指针的问题。问题是这样,我在swift的一个函数里面,参数里需要传递一个指针类型的Int,但是这个函数里面还有一个逃逸闭包escaping,于是就会报错这样:Escap…

Using the “escape“ directive (legacy escaping) is not allowed when auto-escaping is on with a markup

springboot 2.3.0版本以上&#xff0c;springboot自动引用freemarker模板文件的后缀从.ftl变成了.ftlh <!DOCTYPE html> <#escape x as x?html> <#include "../common/macro.ftl"> <html lang"en"> </html> </#escape&…

Escaping closure captures non-escaping parameter ‘xx‘

新版的Swift闭包做参数默认是noescaping&#xff0c;不再是escaping。 如果函数里执行该闭包&#xff0c;要添加escaping。

Swift中的逃逸闭包(@escaping )与非逃逸闭包(@noescaping)

逃逸闭包 概念&#xff1a;一个接受闭包作为参数的函数&#xff0c;该闭包可能在函数返回后才被调用&#xff0c;也就是说这个闭包逃离了函数的作用域&#xff0c;这种闭包称为逃逸闭包。当你声明一个接受闭包作为形式参数的函数时&#xff0c;你可以在形式参数前写escaping来…

VMware创建Linux虚拟机之(三)Hadoop安装与配置及搭建集群

Hello&#xff0c;world&#xff01; &#x1f412;本篇博客使用到的工具有&#xff1a;VMware16 &#xff0c;Xftp7 若不熟悉操作命令&#xff0c;推荐使用带GUI页面的CentOS7虚拟机 我将使用带GUI页面的虚拟机演示 虚拟机&#xff08;Virtual Machine&#xff09; 指通过…

hadoop安装及简单的使用

hadoop安装及简单的使用 一、hadoop运行环境搭建二、hadoop 目录结构三、hadoop 本地模式四、hadoop 伪分布式模式五、伪分布式 YARN 运行六、伪分布式启动历史服务器七、伪分布式配置日志的聚集八、hadoop 集群模式 一、hadoop运行环境搭建 1.环境准备 安装 hadoop 需要使用 …

hadoop安装(window10)

一、下载和winutils 1.下载&#xff1a;http://archive.apache.org/dist/hadoop/core/ 官网下载&#xff1a;http://hadoop.apache.org/releases.html &#xff08;提供最新的几个版本&#xff09; https://github.com/steveloughran/winutils&#xff08;windows安装需要&…

Hadoop安装与配置

第一步&#xff1a;装虚拟机 我把hadoop安装需要的文件放在下面大家自行去取&#xff1a; 百度网盘 请输入提取码 提取码&#xff1a;8888 由于centos镜像文件太大传不上去需要的话可以加我qq:364960241 目录 第一步&#xff1a;装虚拟机 第二步&#xff1a;配置静态网络…