狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

哪些地方應該創建索引

freeflydom
2023年8月18日 9:58 本文熱度 519

create INDEX idx_status ON table_name(status);

select * from table_name where status = 1;

以下條件查詢大概率會走索引:

  1. 等值查詢:例如 where column_name = 'value'

  2. 范圍查詢where column_name BETWEEN 'value1' AND 'value2'where column_name > 'value',這種查詢也可能會走索引,特別是當被索引的列的范圍較小時。

  3. 部分模糊查詢:主要是右模糊查詢,例如 where column_name LIKE 'value%'

  4. 排序和分組:當查詢涉及到 ORDER BYGROUP BY 子句時,如果被排序或分組的列上有索引,數據庫可能會選擇使用索引來加速查詢。

  5. 連接查詢:在連接查詢中,如果連接的字段有索引,數據庫可能會利用這些索引來優化查詢。


2.  對于查找單條記錄的字段創建唯一索引

唯一鍵對應的數據只有一條,要找到這條記錄只能全表掃描,數據量大會很慢。加唯一索引可以直接定位到記錄。

create UNIQUE INDEX idx_uid ON table_name(uid); select * from table_name where uid = 123;

3.  在表與表的關聯鍵上創建索引

表JOIN時依靠這個鍵進行關聯,如果不索引就會掃描全表去對比鍵值,數據量越大關聯效率越低。加索引可以快速匹配關聯鍵值。

create INDEX idx_post_id ON comments(post_id);  select * from comments where post_id = 12345;

4.  在經常需要排序的字段建立索引

排序時如果不加索引,需要全表掃描獲取所有記錄再排序,數據量大時排序開銷巨大。索引可以按序直接讀取記錄,避免全表掃描。

create INDEX idx_create_time ON table_name(create_time); select * from table_name ORDER BY create_time DESC;

5.  對于頻繁用于left join的表的關聯鍵創建索引

左連表時都會全表掃描右表去匹配關聯條件,數據量大時非常慢。加索引可以快速過濾出匹配的記錄。

create INDEX idx_user_id ON table_a(user_id);   select * from table_a LEFT JOIN table_b ON table_a.user_id = table_b.user_id;

6.  在表的數據量巨大時對主鍵創建索引

主鍵默認會有索引,如果去掉索引,增刪改查所有操作都會變慢,特別是主鍵查詢需要全表掃描。

create INDEX idx_id ON large_table(id);

7.  對于組合查詢的字段建立聯合索引

單列過濾效果不好時,加聯合索引可以多列組合過濾提升效率。

這里的使用場景太廣泛,請注意。


假設我們有一個示例表格products,包含以下列:

  • product_id - 產品ID(唯一標識)

  • product_name - 產品名稱

  • category - 產品類別

我們希望對product_name列進行右模糊查詢,以找到以特定字符串結尾的產品名稱。

在這種情況下,我們可以創建一個聯合索引,將category列放在product_name之前。這是因為MySQL和一些其他數據庫系統的索引優化算法能更好地利用聯合索引的前綴部分。下面是創建聯合索引的示例 SQL 語句:

create INDEX idx_product_name_category ON products (product_name, category);

以上命令將在products表上創建一個名為idx_product_name_category的聯合索引,該索引涵蓋了product_namecategory兩列。

現在,假設我們要執行右模糊查詢,找到以字符串"xyz"開頭且屬于某個特定類別的產品名稱:

select product_name from products where product_name LIKE 'xyz%' AND category = 'some_category';

在這個查詢中,MySQL可以有效地利用聯合索引idx_product_name_category,首先根據category過濾記錄,然后在滿足category條件的記錄中使用聯合索引來加速product_name的右模糊查詢。

8. 在文本字段創建前綴索引

上面一點其實說到了模糊查詢的問題,針對模糊查詢,有幾點需要提及:

  • 左模糊查詢:如果LIKE查詢的模式以通配符開頭(例如:'%abc'),大多數數據庫系統將無法使用普通B-tree索引來加速查詢。這是因為B-tree索引對于模式開頭的通配符查詢效果較差。

  • 右模糊查詢:如果LIKE查詢的模式以通配符結尾(例如:'abc%'),大多數數據庫系統可以使用普通B-tree索引來加速查詢。這是因為B-tree索引可以快速找到匹配模式前綴的記錄。

  • 左右模糊查詢:如果LIKE查詢的模式既以通配符開頭又以通配符結尾(例如:'%abc%'),通常無法有效使用普通B-tree索引。

  • 不以通配符開頭或結尾的模糊查詢:如果LIKE查詢的模式不以通配符開頭或結尾(例如:'abc''abcde'),并且不包含其他特殊字符(如轉義字符``),大多數數據庫系統可以使用普通B-tree索引來加速查詢。

因此在給文字字段創建索引后,應盡量:

要使LIKE查詢走索引,可以考慮以下方法:

  • 右模糊查詢:如果可能,將通配符放在模式的末尾,例如:'abc%'。這樣,數據庫系統可以使用B-tree索引來快速定位匹配前綴的記錄。

  • 使用其他索引類型:一些數據庫系統支持針對模糊查詢的其他特殊索引類型。例如,PostgreSQL支持Trigram索引,用于處理模糊查詢。

  • 搜索引擎:使用外部搜索引擎,比如ELasticSearch

create INDEX idx_title_prefix ON table(title(10)); select * from table where title LIKE 'key%'

原文



該文章在 2023/8/18 9:59:00 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved