mysql - sql索引问题
问题描述
有3个语句。
where cid=?
where id=? and ownerid=?
where cid=? and ownerid=?
现在id已经是主键索引了。请问这样的情况表表应该如何加索引?
分别对ownerid,cid添加索引吗?
还有一种情况,另一个表:where cid=? and userid=?where userid=?where cid=?这3个sql语句应该如何添加索引?分别对userid和cid添加索引?
问题解答
回答1:第一种加一个(cid,ownerid)的索引 顺序不要颠倒 关于id和ownerid的不用加了 id已经是主键了 再加ownerid的索引纯属多余
第二种加一个(cid,userid)和userid
当然这两种情况严格来说都需要确认哪个字段的选择性高 如果差别很大的话 建议根据情况把复合索引的第一个字段使用选择性高的字段
回答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:针对第一个的三条sql语句:
alter table `table_name` add key idx_ownerid_cid(`ownerid`, `cid`);
第二个表的语句:
alter table `table_name` add key idx_cid_useridid(`cid`, `userid`);alter table `table_name` add key idx_userid(`userid`);回答4:
第一种情况加这个索引就可以了
alter table `table_name` add key idx_cid_ownerid(`cid`,`ownerid`);
第二种情况楼上说得对。
相关文章:
1. docker安装后出现Cannot connect to the Docker daemon.2. nignx - docker内nginx 80端口被占用3. javascript - npm run build后调用api返回index.html4. docker start -a dockername 老是卡住,什么情况?5. java - 如图,jsp页面的form中的action是怎么映射到这个位置的?为什么不写dynUser就可以映射到save?6. 计算机 - 我学习了C语言,数据结构和一点点java基础,想自学C++,请问买什么入门书籍好?7. java中关于直接插入排序遇到的问题。8. 关于docker下的nginx压力测试9. docker绑定了nginx端口 外部访问不到10. 我在centos容器里安装docker,也就是在容器里安装容器,报错了?
