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.pswp.cn/news/443092.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443092.shtml
英文地址,請注明出處:http://en.pswp.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&…