免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1589 | 回复: 6
打印 上一主题 下一主题

这样的情况索引也无法加快速度吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-23 12:37 |只看该作者 |倒序浏览
表中有uname类型text,id类型int(11),shijian类型datetime,home类型varchar(40)
uname,id,shijian,home的数据在表中都不是唯一的,都有可能重复
shijian这个值过几分钟就会刷新一次

查询一般使用以下语句:
select uname where shijian>now() and shijian<'2012-12-21 00:00:00' and home='地址'
update test set shijian=now() where ((uname='啊') or (id=123)) and home='地址'

在uname,shijian,home上建立了索引,但是查询的效率几乎没有提高啊。。。
优化的方法不对吗?

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52戌狗
日期:2013-12-27 15:08:11
2 [报告]
发表于 2012-03-23 14:28 |只看该作者
查询语句where语句中尽量别用函数运算
另外explain看下

论坛徽章:
0
3 [报告]
发表于 2012-03-23 15:25 |只看该作者
本帖最后由 77902543 于 2012-03-23 15:26 编辑

explain试了一下
比如这句select uname where shijian>now() and shijian<'2012-12-21 00:00:00' and home='地址'

在hone没有索引的情况下:
id         select_type         table            type         possible_keys         key                 key_len         ref                  rows         Extra
1         SIMPLE                 test            ALL         NULL                 NULL         NULL         NULL         114255         Using where
在hone有索引的情况下:
id         select_type         table                 type                 possible_keys         key                 key_len         ref                 rows                 Extra
1         SIMPLE                 test                 ref                 home                 home         122                 const         62066         Using where

但是两条语句的实际查询时间都在0.12秒左右。。。

论坛徽章:
0
4 [报告]
发表于 2012-03-23 15:41 |只看该作者
select uname where home='地址' and  shijian<'2012-12-21 00:00:00'  and shijian>now()
建立一个home 加shijian是不是好点

论坛徽章:
0
5 [报告]
发表于 2012-03-23 16:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2012-03-23 16:42 |只看该作者
一直以为索引只能一列一个,原来可以组合的。。。
建一个home 加shijian的索引,效率提高了不少,查询在0.003秒左右

只是shijian这一列的内容是在不断变化的,不知道mysql会不会自动更新索引的内容啊?

论坛徽章:
0
7 [报告]
发表于 2012-03-23 18:23 |只看该作者
回复 6# 77902543


    让你雷到了。。
    建索引看选择性
    单列选择性:
  1. select count(distinct(shijian))/count(1) from table_name;
复制代码
选择性越高越适合建索引。
    多列选择性:
  1. select count(1) from (select 1 from table_name group by shijian,home) as temp;
复制代码
记得选择性高的列放前面。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP