国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化

這篇具有很好參考價值的文章主要介紹了SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

如何避免索引失效

1、全值匹配

系統(tǒng)中經(jīng)常出現(xiàn)的sql語句如下:

 EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30  
 EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30 and deptid=4
 EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30 and deptid=4 AND emp.name = 'abcd'  

優(yōu)化后

CREATE INDEX idx_age_deptid_name ON emp(age,deptid,NAME)

建立索引前
SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化,Java,java,sql,數(shù)據(jù)庫,spring boot,mysql

索引后
SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化,Java,java,sql,數(shù)據(jù)庫,spring boot,mysql

2、最佳左前綴法則

如果系統(tǒng)經(jīng)常出現(xiàn)的sql如下:

 EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30   AND emp.name = 'abcd'   

或者

EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.deptid=1   AND emp.name = 'abcd'   

那原來的idx_age_deptid_name 還能否正常使用?
如果索引了多列,要遵守最左前綴法則。指的是查詢從索引的最左前列開始并且不跳過索引中的列。

3、不在索引列上做任何操作(計算、函數(shù)、(自動or手動)類型轉(zhuǎn)換),會導(dǎo)致索引失效而轉(zhuǎn)向全表掃描

4、存儲引擎不能使用索引中范圍條件右邊的列

如果系統(tǒng)經(jīng)常出現(xiàn)的sql如下:

 EXPLAIN SELECT  SQL_NO_CACHE * FROM emp WHERE emp.age=30 AND emp.deptId>20 AND emp.name = 'abc' ; 

那么索引 idx_age_deptid_name這個索引還能正常使用么?
SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化,Java,java,sql,數(shù)據(jù)庫,spring boot,mysql

如果這種sql 出現(xiàn)較多
應(yīng)該建立:

create index idx_age_name_deptid on emp(age,name,deptid)

效果
SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化,Java,java,sql,數(shù)據(jù)庫,spring boot,mysql

# drop index idx_age_name_deptid on emp

5、mysql 在使用不等于(!= 或者<>)的時候無法使用索引會導(dǎo)致全表掃描

 CREATE INDEX idx_name ON emp(NAME)
  EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE   emp.name <>  'abc' 

SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化,Java,java,sql,數(shù)據(jù)庫,spring boot,mysql

6、is not null 也無法使用索引,但是is null是可以使用索引的

  UPDATE emp SET age =NULL WHERE id=123456;
   下列哪個sql語句可以用到索引
  EXPLAIN SELECT * FROM emp WHERE age IS NULL
  EXPLAIN SELECT * FROM emp WHERE age IS NOT NULL

SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化,Java,java,sql,數(shù)據(jù)庫,spring boot,mysql

7、like以通配符開頭(’%abc…’)mysql索引失效會變成全表掃描的操作

SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化,Java,java,sql,數(shù)據(jù)庫,spring boot,mysql

8、字符串不加單引號索引失效

SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化,Java,java,sql,數(shù)據(jù)庫,spring boot,mysql文章來源地址http://www.zghlxwxcb.cn/news/detail-721245.html

9、總結(jié)

假設(shè)index(a,b,c)
      														
where a = 3			索引是否被使用:Y,使用到a
where a = 3 and b = 5						索引是否被使用:Y,使用到a,b
where a = 3 and b = 5 and c = 4										索引是否被使用:Y,使用到a,b,c
where b = 3 或者 where b = 3 and c = 4  或者 where c = 4		索引是否被使用:N
where a = 3 and c = 5	     索引是否被使用:使用到a, 但是c不可以,b中間斷了
where a = 3 and b > 4 and c = 5	 索引是否被使用:使用到a和b, c不能用在范圍之后,b斷了
where a is null and b is not null  	 索引是否被使用: is null 支持索引 但是is not null 不支持,所以 a 可以使用索引,但是  b不可以使用
where a <> 3   	 索引是否被使用:不能使用索引
where   abs(a) =3	索引是否被使用:不能使用 索引
where a = 3 and b like 'kk%' and c = 4	索引是否被使用:Y,使用到a,b,c
where a = 3 and b like '%kk' and c = 4	索引是否被使用:Y,只用到a
where a = 3 and b like '%kk%' and c = 4	索引是否被使用:Y,只用到a
where a = 3 and b like 'k%kk%' and c = 4	索引是否被使用:Y,使用到a,b,c

到了這里,關(guān)于SQL查詢優(yōu)化---單表使用索引及常見索引失效優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MySQL 索引優(yōu)化實踐(單表)

    MySQL 索引優(yōu)化實踐(單表)

    ??????索引是為了高效查詢排好序的數(shù)據(jù)結(jié)構(gòu),當(dāng)表數(shù)據(jù)量到達一個量級沒有對應(yīng)索引幫助查詢耗時會很長,MySQL資源開銷也會非常大,當(dāng)然索引也不能隨意創(chuàng)建,要做到 盡量少的索引解決盡量多的問題 ,這里會對一些業(yè)務(wù)場景做索引優(yōu)化演示,這篇文中只介紹單表索引優(yōu)

    2024年02月07日
    瀏覽(20)
  • MySQL索引3——Explain關(guān)鍵字和索引使用規(guī)則(SQL提示、索引失效、最左前綴法則)

    MySQL索引3——Explain關(guān)鍵字和索引使用規(guī)則(SQL提示、索引失效、最左前綴法則)

    目錄 Explain 索引性能分析 Id ——select的查詢序列號 Select_type——select查詢的類型 Table——表名稱 Type——select的連接類型 Possible_key ——顯示可能應(yīng)用在這張表的索引 Key——實際用到的索引 Key_len——實際索引使用到的字節(jié)數(shù) Ref??? ——索引命中的列或常量 Rows——預(yù)

    2024年02月14日
    瀏覽(18)
  • 查詢優(yōu)化之單表查詢

    查詢優(yōu)化之單表查詢

    查詢 category_id 為1 且 comments 大于 1 的情況下,views 最多的 article_id 我們一般會使用以下語句查詢 這個sql語句的type是all,并且Extra里面出現(xiàn)了Using filesort,這個必須優(yōu)化 添加索引 我們再次進行上面語句的查詢 我們可以看到type變成了range,但是extra里面卻是Using filesort ,這個性能

    2024年02月01日
    瀏覽(16)
  • 索引使用——SQL提示、覆蓋索引、回表查詢

    索引使用——SQL提示、覆蓋索引、回表查詢

    use index是給MySQL一個提示,在執(zhí)行的時候盡量使用該索引,至于MySQL最后會不會接收該建議,則不一定。 ignore index是mysql忽略某個索引。 force index則強制mysql使用該索引。mysql別無選擇。 覆蓋索引和回表查詢是兩個相對的概念,先講一下回表查詢。 回表:指的是先走二級索引去

    2024年02月16日
    瀏覽(91)
  • SQL Server 單表數(shù)據(jù)查詢

    SQL Server 單表數(shù)據(jù)查詢

    提示: 本篇文章詳細(xì)介紹怎樣向SQLServer中導(dǎo)入表格數(shù)據(jù),導(dǎo)入之后根據(jù)不同的查詢條件完成查詢?nèi)蝿?wù). 導(dǎo)入成功之后,可以點開表格查看內(nèi)容: (如下圖即導(dǎo)入成功) 其他表同理可得,也可以同時導(dǎo)入 (1)方法一 (2)方法二 (1)方法一 (2)方法二 (1)方法一 (2)方法二 (1)方法一 (2)方法二

    2023年04月08日
    瀏覽(15)
  • 【SQL開發(fā)實戰(zhàn)技巧】系列(二):簡單單表查詢

    【SQL開發(fā)實戰(zhàn)技巧】系列(一):關(guān)于SQL不得不說的那些事 【SQL開發(fā)實戰(zhàn)技巧】系列(二):簡單單表查詢 【SQL開發(fā)實戰(zhàn)技巧】系列(三):SQL排序的那些事 【SQL開發(fā)實戰(zhàn)技巧】系列(四):從執(zhí)行計劃討論UNION ALL與空字符串UNION與OR的使用注意事項 【SQL開發(fā)實戰(zhàn)技巧】系列

    2024年01月16日
    瀏覽(19)
  • 如何使用索引加速 SQL 查詢 [Python 版]

    推薦:使用 NSDT場景編輯器助你快速搭建可二次編輯器的3D應(yīng)用場景 假設(shè)您正在篩選一本書的頁面。而且您希望更快地找到所需的信息。你是怎么做到的?好吧,您可能會查找術(shù)語索引,然后跳轉(zhuǎn)到引用特定術(shù)語的頁面。SQL 中的索引的工作方式與書籍 中的索引 類似。 在大多

    2024年02月13日
    瀏覽(632)
  • SQL筆記 -- 索引失效情況

    對于多列索引,過濾條件要使用索引必須按照索引建立時的順序,依次滿足,一旦跳過某個字段,索引后面的字段都無法被使用。 例如以下情況,索引從左到右的順序為age,classId,name,但是在查詢時跳過了age,因此該查詢無法使用索引。 查詢條件中使用了函數(shù)會導(dǎo)致索引失

    2024年01月20日
    瀏覽(19)
  • Mysql中索引優(yōu)化和失效

    要了解索引優(yōu)化和索引失效的場景就要先了解什么是索引 索引是一種有序的存儲結(jié)構(gòu),按照單個或者多個列的值進行排序,以提升搜索效率。 索引的類型 UNIQUE唯一索引 不可以出現(xiàn)相同的值,可以有NULL值。 INDEX普通索引 允許出現(xiàn)相同的索引內(nèi)容。 PRIMARY KEY主鍵索引 不允許出

    2024年02月20日
    瀏覽(31)
  • like模糊查詢導(dǎo)致索引失效的解決方案

    like模糊查詢導(dǎo)致索引失效的解決方案

    我們在使用like 通配符有下面三種用法,其中第1和第2的用法會引起索引失效的問題。這是因為MySQL的索引是按照從左到右的順序進行匹配的,而前導(dǎo)通配符(比如%abc)會導(dǎo)致無法按照索引順序進行匹配。 1、like \\\'%name\\\'?? —— 失效 2、like \\\'%name%\\\'? —— 失效 3、like \\\'name%\\\' 現(xiàn)在來

    2024年02月11日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包