mysql左連接


1.on 后面的條件和where 后面的條件的區別

查詢語句開始 會根據 on后面的條件創建一張虛擬表,左邊表是全部數據,右邊表會根據on后面的條件進行篩選。

然后再根據where后面的條件進行篩選虛擬表中的數據作為最終數據

所以如果是篩選右表中的條件 放在了where 中則則會過濾掉 部分左表中的數據

結論:篩選右表的條件和左右表關聯的條件寫在on中  篩選左表的條件寫在where中  

 2.右表中的條件放在on中 如果右表的數據量很大的情況下會有很長的查詢時間  是因為創建虛擬表的時候由於數據量大 查詢條件沒有索引造成的  所以相應的增加索引進行查詢。

3.創建索引

alter table  tableName  add Index indexName(clum);

ALTER  TABLE optable_task_item  ADD  INDEX task_id (  `task_id`  );

4.那么where 中的條件創建索引時候有用呢?

5.mysql 的主鍵索引是聚集索引 采用b+tree的數據結構,和btree的區別是  b+樹的data地址放置在葉子節點上,子節點上的主鍵個數根據區域分開 可以更快的定位id  普通索引是非聚集索引,索引下面對應的是主鍵 ,找到到主鍵后在去查詢主鍵索引表中查詢數據。聯合索引兩個索引是都存儲在索引變中的,所以部分情況下是不去查找索引表的。

6.索引的數據類型分為兩種 tree 和hash桶  hash桶一般情況下查找的時間復雜度是 O(1)  但是限制於等值查找,對於范圍查找、模糊查詢  聯合索引的部分查找都不起作用,並且如果鍵值存在大量的重復,還是比較慢的。B+TREE 從根節點到葉子節點的高度不超過一,所以平均的查詢速度相差不大,桶層級之間的指針有索引關聯,可以左右同時查找。

7.為什么sql查詢中避免用 in 和or查詢  可能不能命中索引,在沒有索引的情況下,in是O(logn) or 是O(n)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM