mysql开发中遇到的坑_mysql优化过程中遇见的坑(mysql优化问题特别注意)

单条查询最后添加 LIMIT 1,停止全表扫描。

对于char(4) 或者vachar(4),无论是中文还是英文都是存储四个字符,注意是字符而不是字节。

如果一个字段未int类型,此类型只有0、1两个状态,需要为此建立索引吗?过度索引,影响更新速度,必须在唯一性较高的字段上建立非聚集索引。

在创建表的时候如果在业务中能保证非null的字段,建议明确标示not null 因为mysql中对null需要特殊的标示。使用not null 字段更节省空间。对接下来的索引构建也有好处。

count() 和count(name) name 代表某个字段,可以为NULL。在mysql中count()会把null统计进去、而count(name) 不会。如果统计的字段中含有null,这个两个统计的结果是不同的。

在sql语句等号左边用函数,会使该查询在该字段无法使用索引。如LENGTH(str) 函数。

索引也是需要存储到物理空间的,经常增删的表不适合建太多的索引,因为索引的维护会很耗时间。一张表最多建立15个索引。索引的长度越小越好,索引是有序的。如果查询Max()之类用索引的话,连表都不用查询了,快得飞起。

mysql中null不参与比较运算,name <>'小米' 得出的结果中不包含 name=null的情况。在业务不能保证某字段是否为null的情况,写代码的时候需要注意null的坑。保证取得的数据是对而全,然后再考虑查询速率问题。

MySQL InnoDB默认行级锁。行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁把整张表锁住,这点需要注意。

对整数类型指定宽度,比如INT(11),没有任何卵用。INT使用32位(4个字节)存储空间,那么它的表示范围已经确定,所以INT(1)和INT(20)对于存储和计算是相同的。

UNSIGNED表示不允许负值,大致可以使正数的上限提高一倍。比如TINYINT存储范围是-128 ~ 127,而UNSIGNED TINYINT存储的范围却是0 - 255。

通常来讲,没有太大的必要使用DECIMAL数据类型。即使是在需要存储财务数据时,仍然可以使用BIGINT。比如需要精确到万分之一,那么可以将数据乘以一百万然后使用BIGINT存储。这样可以避免浮点数计算不准确和DECIMAL精确计算代价高的问题。

TIMESTAMP使用4个字节存储空间,DATETIME使用8个字节存储空间。因而,TIMESTAMP只能表示1970 - 2038年,比DATETIME表示的范围小得多,而且TIMESTAMP的值因时区不同而不同。

schema的列不要太多。原因是存储引擎的API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列,这个转换过程的代价是非常高的。如果列太多而实际使用的列又很少的话,有可能会导致CPU占用过高。

大表ALTER TABLE非常耗时,MySQL执行大部分修改表结果操作的方法是用新的结构创建一个张空表,从旧表中查出所有的数据插入新表,然后再删除旧表。尤其当内存不足而表又很大,而且还有很大索引的情况下,耗时更久。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初级开发人员的缺点_在您作为初级开发人员的第一年获得此建议

初级开发人员的缺点Are you a junior developer embarking on your software development career?您是从事软件开发事业的初级开发人员吗&#xff1f; Or a recent computer science graduate who has recently started a new job?还是最近刚开始从事新工作的计算机科学专业…

Spark日志分析

根据tomcat日志计算url访问了情况&#xff0c;具体的url如下&#xff0c; 要求&#xff1a;区别统计GET和POST URL访问量 结果为&#xff1a;访问方式、URL、访问量 输入文件&#xff1a; 196.168.2.1 - - [03/Jul/2014:23:36:38 0800] "GET /course/detail/3.htm HTTP/1.…

进程、线程和协程的区别

首先&#xff0c;给出“进程、线程和协程”的特点&#xff1a; 进程&#xff1a;拥有自己独立的堆和栈&#xff0c;既不共享堆&#xff0c;也不共享栈&#xff0c;进程由操作系统调度&#xff1b;线程&#xff1a;拥有自己独立的栈和共享的堆&#xff0c;共享堆&#xff0c;不共…

leetcode 493. 翻转对(分治算法)

给定一个数组 nums &#xff0c;如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。 你需要返回给定数组中的重要翻转对的数量。 示例 1: 输入: [1,3,2,3,1] 输出: 2 代码 class Solution {public int reversePairs(int[] nums) {return getR…

使用brew安装软件

brew 又叫Homebrew&#xff0c;是Mac OSX上的软件包管理工具&#xff0c;能在Mac中方便的安装软件或者卸载软件&#xff0c; 只需要一个命令&#xff0c; 非常方便 brew类似ubuntu系统下的apt-get的功能 阅读目录 安装brew 使用brew安装软件 使用brew卸载软件 使用brew查询软…

mysql 绕过select报错_MySQL注射绕过技巧(三)

在测试一次注入的时候发现过滤了逗号 所以找到这个思路第一次遇到的时候是看key哥挖洞 遇到后就想记录下来正文过滤了逗号 利用join来逐步查询select*from(select 1)a join (select 2)b join (select 3)c;例如下图逐步查询user()user() basediruser() basedir version()也可以…

深入理解javascript

深入理解JavaScript系列&#xff08;1&#xff09;&#xff1a;编写高质量JavaScript代码的基本要点 深入理解JavaScript系列&#xff08;2&#xff09;&#xff1a;揭秘命名函数表达式 深入理解JavaScript系列&#xff08;3&#xff09;&#xff1a;全面解析Module模式 深入理…

spark 并行处理_如何使用Spark集群并行处理大数据

spark 并行处理by Hari Santanam通过Hari Santanam 如何使用Spark集群并行处理大数据 (How to use Spark clusters for parallel processing Big Data) 将Apache Spark的弹性分布式数据集(RDD)与Databricks一起使用 (Use Apache Spark’s Resilient Distributed Dataset (RDD)…

django前后端分离部署

部署静态文件&#xff1a; 静态文件有两种方式1&#xff1a;通过django路由访问2&#xff1a;通过nginx直接访问 方式1&#xff1a; 需要在根目录的URL文件中增加&#xff0c;作为入口 url(r^$, TemplateView.as_view(template_name"index.html")), 在setting中更改静…

Citrix、Microsoft、VMware虚拟桌面之网页接口登录对比

软件环境 Citrix Xendesktop 5.6 Microsoft Windows Server 2008 R2 Hyper-v VMware View client 4.6 首先看citrix的&#xff0c;很早之前Citrix就推出了网页的虚拟桌面和应用程序&#xff0c;默认是单点登录获取桌面 下面是微软的&#xff0c;和citrix很类似&#xff0c; 据我…

leetcode 976. 三角形的最大周长

给定由一些正数&#xff08;代表长度&#xff09;组成的数组 A&#xff0c;返回由其中三个长度组成的、面积不为零的三角形的最大周长。 如果不能形成任何面积不为零的三角形&#xff0c;返回 0。 示例 1&#xff1a; 输入&#xff1a;[2,1,2] 输出&#xff1a;5 示例 2&…

recyclerview 加载fragment_恢复 RecyclerView 的滚动位置

您可能在开发过程中遇到过这种情况&#xff0c;在 Activity/Fragment 被重新创建后&#xff0c;RecyclerView 丢失了它之前保有的滚动位置信息。通常这种情况发生的原因是由于异步加载 Adapter 数据&#xff0c;且数据在 RecyclerView 需要进行布局的时候尚未加载完成&#xff…

4.6.2 软件测试的步骤

系统测试是可有可无的。因为系统测试是和环境结合在一起。系统测试应该是在系统设计或者是需求分析阶段的前一步来完成的。 单元测试它的测试计划是在详细设计阶段完成。所以说单元测试的计划是在详细设计阶段来完成的。 模块接口的测试它保证了测试模块的数据流可以正确地流入…

nodejs调试ndb_如何开始使用NDB调试NodeJS应用程序

nodejs调试ndbNodeJs was released almost 9 years ago. The default debugging process of NodeJs (read Node.js) is quite clumsy. You are likely already aware of the need to add --inspect to the node script with node inspector. It is also dependent on Chrome. T…

初学必读:61条面向对象设计的经验原则

(1)所有数据都应该隐藏在所在的类的内部。(2)类的使用者必须依赖类的共有接口&#xff0c;但类不能依赖它的使用者。(3)尽量减少类的协议中的消息。(4)实现所有类都理解的最基本公有接口[例如&#xff0c;拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析…

栈,递归

栈的基本操作注意&#xff1a;是从后往前连接的 1 #include <stdio.h>2 #include <Windows.h>3 typedef struct sStack4 {5 int num;6 struct sStack* pnext;7 }Stack;8 void push(Stack **pStack,int num);9 int pop(Stack **pStack); 10 BOOL isEmpty(St…

mysql集群多管理节点_项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

多管理节点MySQL的配置很easy&#xff0c;仅须要改动之前的博文中提高的三种节点的三个地方。1)改动管理节点配置打开管理节点C:\mysql\bin下的config.ini文件&#xff0c;将当中ndb_mgmd的相关配置改动为例如以下内容&#xff1a;[ndb_mgmd]# Management process options:# Ho…

leetcode 767. 重构字符串(贪心算法)

给定一个字符串S&#xff0c;检查是否能重新排布其中的字母&#xff0c;使得两相邻的字符不同。 若可行&#xff0c;输出任意可行的结果。若不可行&#xff0c;返回空字符串。 示例 1: 输入: S “aab” 输出: “aba” 代码 class Solution {public String reorganizeStri…

APK伪加密

一、伪加密技术原理 我们知道android apk本质上是zip格式的压缩包&#xff0c;我们将android应用程序的后缀.apk改为.zip就可以用解压软件轻松的将android应用程序解压缩。在日常生活或者工作中&#xff0c;我们通常为了保护我们自己的文件在进行压缩式都会进行加密处理。这样的…

乱花渐欲迷人眼-杜绝设计的视噪

视噪&#xff0c;又称视觉噪音。我们每天接受来自外界的大量信息&#xff0c;这些信息有将近70&#xff05;是通过视觉感知获得的。视噪会干扰我们对信息的判断&#xff0c;影响到产品的易用性和可用性&#xff0c;与用户体验的好坏息息相关。(克劳德香农图演示了噪音如何影响信…