mysql - sql索引問題
問題描述
有3個(gè)語句。
where cid=?
where id=? and ownerid=?
where cid=? and ownerid=?
現(xiàn)在id已經(jīng)是主鍵索引了。請(qǐng)問這樣的情況表表應(yīng)該如何加索引?
分別對(duì)ownerid,cid添加索引嗎?
還有一種情況,另一個(gè)表:where cid=? and userid=?where userid=?where cid=?這3個(gè)sql語句應(yīng)該如何添加索引?分別對(duì)userid和cid添加索引?
問題解答
回答1:第一種加一個(gè)(cid,ownerid)的索引 順序不要顛倒 關(guān)于id和ownerid的不用加了 id已經(jīng)是主鍵了 再加ownerid的索引純屬多余
第二種加一個(gè)(cid,userid)和userid
當(dāng)然這兩種情況嚴(yán)格來說都需要確認(rèn)哪個(gè)字段的選擇性高 如果差別很大的話 建議根據(jù)情況把復(fù)合索引的第一個(gè)字段使用選擇性高的字段
回答2:情況1
ALTER TABLE test_table ADD INDEX index1 (id,ownerid);
ALTER TABLE test_table ADD INDEX index2 (cid,ownerid);
情況2
ALTER TABLE test_table ADD INDEX index3 (cid,userid);
ALTER TABLE test_table ADD INDEX index4 (userid);
回答3:針對(duì)第一個(gè)的三條sql語句:
alter table `table_name` add key idx_ownerid_cid(`ownerid`, `cid`);
第二個(gè)表的語句:
alter table `table_name` add key idx_cid_useridid(`cid`, `userid`);alter table `table_name` add key idx_userid(`userid`);回答4:
第一種情況加這個(gè)索引就可以了
alter table `table_name` add key idx_cid_ownerid(`cid`,`ownerid`);
第二種情況樓上說得對(duì)。
相關(guān)文章:
1. python - 為什么match匹配出來的結(jié)果是<_sre.SRE_Match object; span=(0, 54), match=’’>2. mysql優(yōu)化 - mysql 一張表如果不能確保字段列長(zhǎng)度一致,是不是就不需要用到char。3. Python處理Dict生成json4. mysql updtae追加數(shù)據(jù)sql語句5. python - 請(qǐng)問這兩個(gè)地方是為什么呢?6. python - 用os.environ能獲取到的環(huán)境變量,在os.environ.getenv卻得不到,這是為什么?7. javascript - 按鈕鏈接到另一個(gè)網(wǎng)址 怎么通過百度統(tǒng)計(jì)計(jì)算按鈕的點(diǎn)擊數(shù)量8. python中怎么對(duì)列表以區(qū)間進(jìn)行統(tǒng)計(jì)?9. 請(qǐng)教一個(gè)mysql去重取最新記錄10. 大家都用什么工具管理mysql數(shù)據(jù)庫?
