mysql索引优化面试题_mysql索引优化面试题

曾经偷偷的面试了两个单位,都提到了Mysql的优化问题,所以以后要多多学习数据库的优化知识了。建设数据库的优化大概主要就是索引的优化了吧,因为我们不可能修改数据结构的情况下,提高数据库的查询效率似乎也只能用索引了。当然这也是建立在你sql语句写的比较科学的情况下,如果你的sql语句本身就写的比较垃圾,神仙也救不了你!

下边是在网上找到的一些资料,保留下来备用吧

1,创建索引

对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。

2,复合索引

比如有一条语句是这样的:select * from users where area=’beijing’ and age=22;

如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area,

age,

salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

3,索引不会包含有NULL值的列

只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

4,使用短索引

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的 列,如果在前10 个或20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

5,排序的索引问题

mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

6,like语句操作

一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。

7,不要在列上进行运算

select * from users where YEAR(adddate)<2007;

将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成

select * from users where adddate

8,不使用NOT IN和操作

NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id3则可使用id>3 or id<3来代替。

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

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

相关文章

python 可视化大屏幕_如何用python搭建可视化看板?

可视化看板是指大屏 驾驶舱 dashboard这些吗&#xff0c;如果是&#xff0c;那不建议用python来做&#xff0c;不专业&#xff0c;目前没有见过哪个项目上的大屏是用python做的&#xff0c;它不是万能的大屏的制作一般是这样的先根据用户的需求&#xff0c;所在的行业&#xff…

mysql语句转为sql语句_MySQL 的分页查询 SQL 语句(转)

转自 https://www.cnblogs.com/wbxk/p/10644766.htmlMySQL一般使用 LIMIT 实现分页。基本语句为&#xff1a;SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...在中小数据量的情况下&#xff0c;这样的SQL足够用了&#xff0c;唯一需要注意的问题就是确保使用了索引。举例…

mysql查询选课最少成绩最高_MySQL 练习

最近在学习MYSQL 数据库&#xff0c;在此mark 一下做过的sql 相关练习表结构如下&#xff1a;teacher表tidtnameclass表cidcaptioncourse表cidcnameteacher_idstudent表sidgenderclass_idsnamescore表sidstudent_idcourse_idnumclass :teacher : course : student :score : 根…

mysql中nchar_浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别

1&#xff0c;定义&#xff1a;char&#xff1a; 固定长度&#xff0c;存储ANSI字符&#xff0c;不足的补英文半角空格。nchar&#xff1a; 固定长度&#xff0c;存储Unicode字符&#xff0c;不足的补英文半角空格varchar&#xff1a; 可变长度&#xff0c;存储ANSI字符&…

mysql 5.764_RHEL5.764位源码编译安装MySQL-5.5.42遇到的问题

由于MySQL从5.5之后的版本源码编译安装用cmake, make, make install安装,不用./Configure,make,make install 安装&#xff0c;所以要看下系由于MySQL从5.5之后的版本源码编译安装用cmake, make, make install安装,不用./Configure,make,make install 安装&#xff0c;所以要看…

java 判断子类_java判断class是否是某个类的子类或父类

Class c = ArrayList.class; c.isPrimitive(); //判断c是否为基本数据类型 c.isAssignableFrom(List.class); //判断c是否是List类的子类或父类 c.getGenericType(); //得到泛型类型 免费学习视频分享:java视频教程 实例:通过反射得到List 集合中的泛型类型package com.zf.ta…

java转日期_Java时间日期格式转换

import java.util.*;import java.text.*;importjava.util.Calendar;public classVeDate {/*** 获取现在时间**return返回时间类型 yyyy-MM-dd HH:mm:ss*/public staticString getNowDate() {Date currentTime newDate();SimpleDateFormat formatter new SimpleDateFormat("…

java 对比工具_Java几款性能分析工具的对比

在给客户进行应用程序维护的过程中&#xff0c;我注意到一些关于高负载条件下的性能问题。理论上&#xff0c;增加对应用程序的负载会使性能有所下降&#xff0c;但是我认为性能下降的比率远远高于负载的增加&#xff0c;同时我也发现&#xff0c;性能可以通过改变应用程序的逻…

java for循环获取value_Java遍历取出Map集合key-value数据的4种方法

将map集合存数据与取出数据全部放在一个类MapTest中&#xff0c;方便阅读与查看随便创建一个包&#xff0c;在包中新建一个class文件&#xff0c;(也可以不建包&#xff0c;直接新建一个class文件)新建class文件MapTest.java,代码如下&#xff1a;import java.util.HashMap;imp…

as3调用java_关于openamf我用as3链接java程序,并调用相关的方法,但是能够连上,却不能够调用是怎么回事...

我用的openamf做flashremoting服务器是没问题的&#xff01;这是as的代码&#xff01;package{importflash.display.Sprite;importflash.net.ObjectEncoding;importcom.riafan.remoting.PendingCall;import...我用的openamf做flash remoting服务器是没问题的&#xff01;这是as…

phoenix hbase java_java jdbc访问hbase phoenix

上面直接介绍了druid访问hbase phoenix的案例hbase Phoenix整合mybatis DruidDataSource这里还是贴一下jdbc直接访问的方式。public static void main(String[] args) {try {Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");Properties propertiesnew Prope…

mp4v2 写mp4 java_使用mp4v2将H264+AAC合成mp4文件

录制程序要添加新功能&#xff1a;录制CMMB电视节目&#xff0c;我们的板卡发送出来的是RTP流(H264视频和AAC音频)&#xff0c;录制程序要做的工作是&#xff1a;(1)接收并解析RTP包&#xff0c;分离出H264和AAC数据流&#xff1b;(2)将H264视频和AAC音频以某种格式封装&#x…

java完全解耦_java-完全解耦

完全解耦&#xff1a;降低代码的限制性&#xff0c;是同一代码能够用到更多的程序中1 packageinterfaces.interfaceprocessor;2 import staticnet.mindview.util.Print.print;34 interfaceProcessor {5 String name();6 Object process(Object input);7 }8 public classApply{9…

java验证xml格式是否正确的是_spring源码附录(1)java实现对XML格式的验证

最近在看spring源码&#xff0c;涉及到xml文档的解析、xml文档的格式验证&#xff0c;发现自己对xml解析的基础较为薄弱&#xff0c;本篇博客复习下DOM方式解析xml(即spring解析xml的方式)。DOM解析XML是将整个XML作为一个对象&#xff0c;占用内存较多。另外一个java官方的XML…

java 批量打印_JAVA批量打印皕杰报表

原标题&#xff1a;JAVA批量打印皕杰报表不使用皕杰报表工具条上的打印按钮&#xff0c;用java怎么实现批量打印皕杰报表呢&#xff1f;解决方案&#xff1a;皕杰报表提供了批量打印的工具类ReportToolkits&#xff0c;ReportToolkits类参考帮助文档-开发指南-javadoc-bios.rep…

java 截串_java字符串截取

import org.apache.commons.lang.stringutils;public class substr{public static void main(string[] args) {string str "1234567890abcdefg";system.out.println("-----------" str.substring(0)); //从字符串索引为0开始截取&#xff0c;一直到字符串…

java json 构造_json 构造和解析

目录&#xff1a;(1)引入jar包&#xff1b;(2)json的构造&#xff1b;(3)json的解析&#xff1b;(4)遍历未知key。(1)java对json的处理&#xff0c;可借助org.json.jar.org.jsonjson20090211(2)json的构造//construct json and output itpublic String constructJson() throws …

java http 上传文件_java利用httpClient实现后台文件上传请求

之前写过基于html和js的文件上传方法java 用springMVC 和HttpServletRequest 两种实现文件上传的方法和httpClient后台执行普通post请求的文章java通过httpClient从接口请求数据入库以及自动生成实体工具类&#xff0c;最近接到一个需求&#xff0c;需要用到后台去调用远程服务…

morse java_华威MORSE,华威数统那个比较好?

其实没什么高下之分了。 毕竟大家都在一个系&#xff0c;上下课交作业都在一起。我个人觉得&#xff0c;数统要比morse更flexible一些。首先你要明白morse和数统课程上的区别在哪里:数统 大一必修数统大一必修共计84CATSmorse大一必修morse大一必修共计120CATS其实差的就是EC10…

java中 以下接口以键_java复习题

1&#xff0e;Java中的long类型占用()个字节。A、1B、2C、4D、82&#xff0e;以下关于继承的叙述不正确的是()。A、在Java中类只允许单一继承B、在Java中一个类只能实现一个接口C、在Java中一个类可以同时继承一个类和实现一个接口D、在Java中接口允许多继承3&#xff0e;4&…