LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

哪些地方應(yīng)該創(chuàng)建索引

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

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',這種查詢也可能會走索引,特別是當(dāng)被索引的列的范圍較小時。

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

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

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


2.  對于查找單條記錄的字段創(chuàng)建唯一索引

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

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

3.  在表與表的關(guān)聯(lián)鍵上創(chuàng)建索引

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

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

4.  在經(jīng)常需要排序的字段建立索引

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

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

5.  對于頻繁用于left join的表的關(guān)聯(lián)鍵創(chuàng)建索引

左連表時都會全表掃描右表去匹配關(guān)聯(lián)條件,數(shù)據(jù)量大時非常慢。加索引可以快速過濾出匹配的記錄。

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.  在表的數(shù)據(jù)量巨大時對主鍵創(chuàng)建索引

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

create INDEX idx_id ON large_table(id);

7.  對于組合查詢的字段建立聯(lián)合索引

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

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


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

  • product_id - 產(chǎn)品ID(唯一標(biāo)識)

  • product_name - 產(chǎn)品名稱

  • category - 產(chǎn)品類別

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

在這種情況下,我們可以創(chuàng)建一個聯(lián)合索引,將category列放在product_name之前。這是因為MySQL和一些其他數(shù)據(jù)庫系統(tǒng)的索引優(yōu)化算法能更好地利用聯(lián)合索引的前綴部分。下面是創(chuàng)建聯(lián)合索引的示例 SQL 語句:

create INDEX idx_product_name_category ON products (product_name, category);

以上命令將在products表上創(chuàng)建一個名為idx_product_name_category的聯(lián)合索引,該索引涵蓋了product_namecategory兩列。

現(xiàn)在,假設(shè)我們要執(zhí)行右模糊查詢,找到以字符串"xyz"開頭且屬于某個特定類別的產(chǎn)品名稱:

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

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

8. 在文本字段創(chuàng)建前綴索引

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

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

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

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

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

因此在給文字字段創(chuàng)建索引后,應(yīng)盡量:

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

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

  • 使用其他索引類型:一些數(shù)據(jù)庫系統(tǒng)支持針對模糊查詢的其他特殊索引類型。例如,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 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲欧美在线影院点击进入 | 日本玖玖资源在线一区 | 日韩免费在线观看视频 | 香蕉网在线日韩直播 | 亚洲日韩欧美综合 | 久久精品国产欧美日韩亚洲 |