mysql - sql索引問(wèn)題
問(wèn)題描述
有3個(gè)語(yǔ)句。
where cid=?
where id=? and ownerid=?
where cid=? and ownerid=?
現(xiàn)在id已經(jīng)是主鍵索引了。請(qǐng)問(wèn)這樣的情況表表應(yīng)該如何加索引?
分別對(duì)ownerid,cid添加索引嗎?
還有一種情況,另一個(gè)表:where cid=? and userid=?where userid=?where cid=?這3個(gè)sql語(yǔ)句應(yīng)該如何添加索引?分別對(duì)userid和cid添加索引?
問(wèn)題解答
回答1:第一種加一個(gè)(cid,ownerid)的索引 順序不要顛倒 關(guān)于id和ownerid的不用加了 id已經(jīng)是主鍵了 再加ownerid的索引純屬多余
第二種加一個(gè)(cid,userid)和userid
當(dāng)然這兩種情況嚴(yán)格來(lái)說(shuō)都需要確認(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語(yǔ)句:
alter table `table_name` add key idx_ownerid_cid(`ownerid`, `cid`);
第二個(gè)表的語(yǔ)句:
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`);
第二種情況樓上說(shuō)得對(duì)。
相關(guān)文章:
1. html5和Flash對(duì)抗是什么情況?2. docker-compose 為何找不到配置文件?3. html5 - h5寫(xiě)的app用的webview,用手機(jī)瀏覽器打開(kāi)不顯示?4. Whitelabel錯(cuò)誤頁(yè)面發(fā)生意外錯(cuò)誤(類(lèi)型=未找到,狀態(tài)= 404)/WEB-INF/views/home.jsp5. docker內(nèi)創(chuàng)建jenkins訪問(wèn)另一個(gè)容器下的服務(wù)器問(wèn)題6. docker容器呢SSH為什么連不通呢?7. docker gitlab 如何git clone?8. 用Java8的 stream 操作外部集合是否存在并發(fā)問(wèn)題?9. css3 - 請(qǐng)問(wèn),如何寫(xiě)這個(gè)顏色的(漸變),并且在移動(dòng)端自適應(yīng)10. javascript - 移動(dòng)端,當(dāng)出現(xiàn)遮罩層的時(shí)候,遮罩層里有div是超出高度scroll的,怎么避免滑動(dòng)div的時(shí)候,body跟隨滑動(dòng)?
