您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 克拉玛依分类信息网,免费分类信息发布

MySql的索引操作

2024/6/24 22:54:13发布90次查看
关于mysql索引的基础知识我就不在这里写了,我不太想当信息的搬运工。
技巧分享:workbench 作为一款专为mysql设计的er/数据库建模工具。除了管理数据库外,其实也是一款sql语句生成利器。合理利用,将带来事半功倍的效果。当然,前提是我们对基础知识的了解。
我先来整理一些索引操作的sql语句,之所以整理,起因是我遇到问题时,在百度里查到的回复,基本上都是错的,需要有人来纠正。
1.多主键(primary)删除
假设场景:你在表里定义了多个主键(primary),比如:id是自增主键,usercode也定义成了主键、userage也定义成了主键。你打算只保留一个id,其他俩个删除,那么对应的sql语句如下:
解释:对指定表进行修改,删除 primary key,同时增加 id 做为  primary key。
alter table `表名` drop primary key,add primary key (`id`);
2.增加普通索引
警告:千万别不改就执行,table_name不是我强调的重点,我要说的是index_name,一定要合理规范索引的命名,例如index_字段名称,或者你有更好的,可以给我留言。
否这你会报错: duplicate key error in mysql (duplicate key name '')。可以肯定的是因为 index_name 没改。沿用了index_name。
alter table `table_name` add index index_name (`column`)
3.关于索引使用规范
(1).索引的使用
索引是需要占用物理存储空间的,索引的使用不当,不但会占用存储空间,而且对查询速度还会起到适得其反的作用,所以索引的定义要数据库设计是要有很清晰的认识。建索引的几大原则
1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式3.尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录4.索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);5.尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可
(2).索引类型
1.普通索引 
最基本的索引,没有任何限制 
2.唯一索引 
索引列的值必须唯一,但允许有空值 
3.主键索引 
主键索引属于一种特殊的唯一索引,不允许有空值 
4.单列索引 
单个多列索引(组合索引)效率高于多个单列索引 
5.最左前缀(leftmost prefixing):多列索引
以上就是mysql的索引操作的详细内容。
克拉玛依分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录