91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

正確使用索引

發布時間:2020-08-10 13:07:29 來源:ITPUB博客 閱讀:161 作者:StevenBeijing 欄目:MySQL數據庫
    MySQL之所以能夠高效的檢索數據,可以說全賴索引之功。在索引使用過程中,要注意一下幾點。
1、MySQL在使用索引時候,采用的是最左匹配原則。
如果是單列索引,則很容易理解,若是多列索引,例如idx_a_b_c(a,b,c),則可以發揮索引功能組合為(a),(a,b),(a,b,c),并且索引是一次便利沒有回溯的,所以如果用到兩列以上,除了最后一列外,前面的都需要精確匹配才行。以下的SQL可以用到索引。
select * from t order by a,b,c;
select * from t where a=constant order by b asc,c asc;
select * from t where a=constant order by b desc,c desc;
select * from t where a=constant and b=constant order by c;
select * from t where a=constant and b>constant order by b;
下面的情況用不到索引或者用不到索引進行排序。
select * from t order by a,d;
select * from t where b=constant order by a;
select * from t where a=constant order by b asc,c desc;
2、MySQL在計算列里無法使用索引。
例如下面的SQL不能使用索引。
select * from t where ABS(a)=constant;
select * from t where f(a)=constant;//f為任意函數
3、MySQL在否定條件中不能使用索引。
例如,where條件里面有<>、not in、not exists的時候,即便是這些判斷字段上加上索引,也不會起作用。
4、MySQL在join中連接字段類型如果不一致,則不能使用索引
例如,INT類型的字段不能和VARCHAR類型的字段join,有個例外是CHAR和VARCHAR在定義字段長度一樣時候可以join,反之不可以,例如,CHAR(20)和VARCHAR(20)可以利用索引,CHAR(20)和VARCHAR(25)則不行,不管VARCHAR里面實際存儲的值是多長。
5、機智地利用覆蓋索引。
MySQL利用B+數索引檢索數據的時候,如果不是基于聚簇索引,或者說如果不是基于主鍵的檢索,那么即便是SQL語句能夠利用索引,但索引返回的信息也只是所需結果行的主鍵值,要渠道全部數據,還需要通過這些主鍵值重新導數據文件里再做一次檢索操作,這樣就需要額外的IO,降低了查詢效率。如下例子。
select namespace from dbrequest_info where update_date between '2017-01-01' and '2017-02-01';
如果在dbrequest_info表里有索引(update_date),則可以利用索引進行查詢。如果想利用覆蓋索引的話,可以添加索引(update_date,namespace)。
6、其他一些需要注意的地方。
索引的分辨度不高,即便使用索引,掃描全表內容也經常超過20%,這就要謹慎添加索引。另外盡快避免使用like查詢,特別是like '%name',這種左邊模糊匹配的情況,使用MySQL無法使用索引。如果出現隱式的字符類型轉換,MySQL也不能使用索引,相當于在判斷列上加了函數一樣。
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邳州市| 衡南县| 铜梁县| 无为县| 华安县| 农安县| 普洱| 云阳县| 奉新县| 常熟市| 洪泽县| 连山| 大悟县| 台中县| 盐津县| 北安市| 南岸区| 科技| 马边| 明水县| 德阳市| 巴南区| 稻城县| 汉中市| 淳化县| 贺兰县| 华池县| 昭觉县| 鄂州市| 铜鼓县| 桦南县| 台中市| 南溪县| 宁远县| 辽阳县| 财经| 大邑县| 桦川县| 东乡族自治县| 灌云县| 礼泉县|