哪些地方應(yīng)該創(chuàng)建索引
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
create INDEX idx_status ON table_name(status); select * from table_name where status = 1; 以下條件查詢大概率會(huì)走索引:
2. 對(duì)于查找單條記錄的字段創(chuàng)建唯一索引唯一鍵對(duì)應(yīng)的數(shù)據(jù)只有一條,要找到這條記錄只能全表掃描,數(shù)據(jù)量大會(huì)很慢。加唯一索引可以直接定位到記錄。 create UNIQUE INDEX idx_uid ON table_name(uid); select * from table_name where uid = 123; 3. 在表與表的關(guān)聯(lián)鍵上創(chuàng)建索引表JOIN時(shí)依靠這個(gè)鍵進(jìn)行關(guān)聯(lián),如果不索引就會(huì)掃描全表去對(duì)比鍵值,數(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í)如果不加索引,需要全表掃描獲取所有記錄再排序,數(shù)據(jù)量大時(shí)排序開銷巨大。索引可以按序直接讀取記錄,避免全表掃描。 create INDEX idx_create_time ON table_name(create_time); select * from table_name ORDER BY create_time DESC; 5. 對(duì)于頻繁用于left join的表的關(guān)聯(lián)鍵創(chuàng)建索引左連表時(shí)都會(huì)全表掃描右表去匹配關(guān)聯(lián)條件,數(shù)據(jù)量大時(shí)非常慢。加索引可以快速過(guò)濾出匹配的記錄。 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ù)量巨大時(shí)對(duì)主鍵創(chuàng)建索引主鍵默認(rèn)會(huì)有索引,如果去掉索引,增刪改查所有操作都會(huì)變慢,特別是主鍵查詢需要全表掃描。 create INDEX idx_id ON large_table(id); 7. 對(duì)于組合查詢的字段建立聯(lián)合索引單列過(guò)濾效果不好時(shí),加聯(lián)合索引可以多列組合過(guò)濾提升效率。 這里的使用場(chǎng)景太廣泛,請(qǐng)注意。 假設(shè)我們有一個(gè)示例表格
我們希望對(duì) 在這種情況下,我們可以創(chuàng)建一個(gè)聯(lián)合索引,將 create INDEX idx_product_name_category ON products (product_name, category); 以上命令將在 現(xiàn)在,假設(shè)我們要執(zhí)行右模糊查詢,找到以字符串 select product_name from products where product_name LIKE 'xyz%' AND category = 'some_category'; 在這個(gè)查詢中,MySQL可以有效地利用聯(lián)合索引 8. 在文本字段創(chuàng)建前綴索引上面一點(diǎn)其實(shí)說(shuō)到了模糊查詢的問(wèn)題,針對(duì)模糊查詢,有幾點(diǎn)需要提及:
因此在給文字字段創(chuàng)建索引后,應(yīng)盡量: 要使
create INDEX idx_title_prefix ON table(title(10)); select * from table where title LIKE 'key%' 原文 該文章在 2023/8/18 9:59:00 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |