自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

常用的數(shù)據(jù)庫(kù)索引優(yōu)化語(yǔ)句總結(jié)

開(kāi)發(fā) 開(kāi)發(fā)工具
在我們編寫(xiě)的SQL語(yǔ)句中,不正確地使用索引列可能會(huì)導(dǎo)致索引不被使用,而進(jìn)行全表掃描,極大地降低了數(shù)據(jù)庫(kù)的性能。因此,學(xué)習(xí)正確的索引的使用方法實(shí)在是很有必要的。

[[178655]]

不管是用C/C++/Java等代碼編寫(xiě)的程序,還是SQL編寫(xiě)的數(shù)據(jù)庫(kù)腳本,都存在一個(gè)持續(xù)優(yōu)化的過(guò)程。也就是說(shuō),代碼優(yōu)化對(duì)于程序員來(lái)說(shuō),是一個(gè)永恒的話題。

近期,我們對(duì)之前編寫(xiě)的數(shù)據(jù)庫(kù)腳本進(jìn)行了全面的自查,從數(shù)據(jù)庫(kù)的性能方面考慮,將腳本里面的很多SQL語(yǔ)句進(jìn)行了優(yōu)化。對(duì)于一條SQL語(yǔ)句來(lái)說(shuō),索引的使用是否正確將直接影響到數(shù)據(jù)庫(kù)的性能,因此,對(duì)索引使用方法的優(yōu)化是數(shù)據(jù)庫(kù)性能優(yōu)化的重點(diǎn)。本文對(duì)常用的數(shù)據(jù)庫(kù)索引優(yōu)化語(yǔ)句進(jìn)行了總結(jié),可供相關(guān)的開(kāi)發(fā)人員參考。

在本文中,使用如下的表tb_test作為示例進(jìn)行說(shuō)明:

  1. create table tb_test 
  2.     id       int             not null
  3.     age      int             not null,  
  4.     name     varchar(30)     not null
  5.     addr     varchar(50)     not null 
  6. ); 
  7. create unique index idx1_tb_test on tb_test(id); 
  8. create        index idx2_tb_test on tb_test(name); 
  9. create        index idx3_tb_test on tb_test(addr); 

索引優(yōu)化建議

1.對(duì)索引列進(jìn)行計(jì)算

例如,我們想要將表tb_test中id大于100的數(shù)據(jù)記錄中的age和name查找出來(lái)。

正確的SQL語(yǔ)句是:

  1. select age,name from tb_test where id > 1*100; 

不建議采用的SQL語(yǔ)句是:

  1. select age,name from tb_test where id/100 > 1; 

2.對(duì)索引列進(jìn)行拼接

例如,我們想要將表tb_test中name為“zhou”、addr為“CQ”的記錄中的id和age查找出來(lái)。

正確的SQL語(yǔ)句是:

  1. select id,age from tb_test where name=’zhou’ and addr=’CQ’; 

不建議采用的SQL語(yǔ)句是:

  1. select id,age from tb_test where concat(name,’ ‘,addr) = ‘zhou CQ’; 

3.在索引列上is null或is not null的使用

例如,我們想要將表tb_test中id大于等于“0”的記錄中的age查找出來(lái)。

正確的SQL語(yǔ)句是:

  1. select age from tb_test where id >= 0; 

不建議采用的SQL語(yǔ)句是:

  1. select age from tb_test where id is not null

4.在索引列上or的使用

例如,我們想要將表tb_test中id等于101或102的記錄中的age和name查找出來(lái)。

正確的SQL語(yǔ)句(使用union)是:

  1. select age,name from tb_test where id = 101 union select age,name from tb_test where id = 102; 

不建議采用的SQL語(yǔ)句(使用or)是:

  1. select age,name from tb_test where id = 101 or id = 102; 

5.盡可能避免索引列在like的首字符使用通配符

例如,我們想要將表tb_test中name匹配“zho”的記錄中的id和age查找出來(lái)。

正確的SQL語(yǔ)句是:

  1. select id,age from tb_test where name like ‘zho%’; 

不建議采用的SQL語(yǔ)句是:

  1. select id,age from tb_test where name like ‘%ho%’; 

6.復(fù)合索引的使用

如果我們建立的索引是復(fù)合索引,那么必須使用到該索引中的***個(gè)字段作為條件時(shí)才能保證系統(tǒng)使用該索引。

例如,我們?cè)诒韙b_test上新建了如下索引:

  1. create index idx4_tb_test on tb_test(id,name,addr); 

以上索引idx4_tb_test相當(dāng)于建立了index(id)、index(id,name)、index(id,name,addr) 這3個(gè)索引。在SQL語(yǔ)句的where條件中單獨(dú)使用name或addr時(shí)不會(huì)使用到該索引,必須使用id時(shí)才會(huì)使用到該索引。

總結(jié)

在我們編寫(xiě)的SQL語(yǔ)句中,不正確地使用索引列可能會(huì)導(dǎo)致索引不被使用,而進(jìn)行全表掃描,極大地降低了數(shù)據(jù)庫(kù)的性能。因此,學(xué)習(xí)正確的索引的使用方法實(shí)在是很有必要的。

但是,需要指出的是,本文中提到的數(shù)據(jù)庫(kù)索引的優(yōu)化語(yǔ)句必須要在操作大量數(shù)據(jù)時(shí)才能顯示出效果。在編寫(xiě)數(shù)據(jù)庫(kù)腳本之前,大家可以先評(píng)估一下系統(tǒng)的數(shù)據(jù)量,看是否有必要在SQL優(yōu)化上花費(fèi)大量的時(shí)間。

【本文是51CTO專欄作者周兆熊的原創(chuàng)文章,作者微信公眾號(hào):周氏邏輯(logiczhou)】

責(zé)任編輯:武曉燕 來(lái)源: csdn博客
相關(guān)推薦

2011-04-06 11:16:47

SQL Server數(shù)查詢優(yōu)化

2019-12-18 08:00:09

MySQL數(shù)據(jù)庫(kù)ORDER BY

2011-08-15 18:09:46

查詢性能調(diào)優(yōu)索引優(yōu)化

2011-01-06 09:28:19

SQL語(yǔ)句

2014-07-18 09:33:53

數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)優(yōu)化

2018-03-30 14:30:10

數(shù)據(jù)庫(kù)SQL語(yǔ)句性能優(yōu)化

2018-03-30 13:59:22

數(shù)據(jù)庫(kù)SQL語(yǔ)句性能優(yōu)化

2011-09-02 10:06:51

OracleSqlLoad常用技巧

2018-06-26 15:58:06

數(shù)據(jù)庫(kù)MySQL索引優(yōu)化

2010-12-10 10:17:21

關(guān)系型數(shù)據(jù)庫(kù)

2010-05-14 14:12:58

MySQL數(shù)據(jù)庫(kù)優(yōu)化

2010-07-01 14:18:09

SQL Server數(shù)

2011-03-28 17:12:36

sql server數(shù)優(yōu)化

2009-03-11 15:40:20

2019-08-19 11:07:41

SQL數(shù)據(jù)庫(kù)優(yōu)化

2010-04-21 14:11:56

Oracle數(shù)據(jù)庫(kù)

2017-12-26 15:10:30

數(shù)據(jù)庫(kù)Oracle操作語(yǔ)句

2010-06-04 11:28:05

MySQL數(shù)據(jù)庫(kù)

2011-03-08 08:49:55

MySQL優(yōu)化單機(jī)

2011-08-19 13:28:25

海量數(shù)據(jù)索引優(yōu)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)