作者:霍邱宋涛_842 | 来源:互联网 | 2023-08-23 10:23
请问大家:MySQL查询时只会使用一个索引吗?就是说无论你建了几个索引,mysql系统只会选择一个来使用吗?当数据量上千万甚至过亿时,类似下面的查询要建立怎样的索引才好呢?select
请问大家:MySQL查询时只会使用一个索引吗?就是说无论你建了几个索引,mysql系统只会选择一个来使用吗?
当数据量上千万甚至过亿时,类似下面的查询要建立怎样的索引才好呢?
select count(DISTINCT 统计ip) from 统计表 where 软件编号=1 and 软件版本=1 and 渠道编号=1 and 软件行为=start and date(统计时间)=date("Y-m-d")
或 select count(DISTINCT 客户端特征编码) from 统计表 where 软件编号=1 and 软件版本=1 and 渠道编号=1 and 软件行为=start and date(统计时间)=date("Y-m-d")
多谢!
25 个解决方案
每天生成一张表?那统计的时候会不会很麻烦?而且几年后岂不是有上千张表了?
一天一张表实在浪费,我想可以根据数据弄成一个星期或一个月甚至一个季度一张表?不过具体怎么操作的,还请ls多指教啊,给出相关文章链接地址也可。加分到50~~
另外我还想问一个问题,就是我在一个点连续给一个表插入数据,假如每秒能够插入5000条左右,请问假如插入换成了全国各地分散的点,那么恐怕一秒钟无法再承载5000条插入?
那么请问怎么样提高各地分散的点的插入效率,比如是否需要建立所谓的连接线程缓存(Thread_Cache池)?会不会有效果?再比如是否需要缓存表的句柄?这样每个插入的用户就不用重复打开表了?另外就是在插入的时候,系统是否会自动写日志,那么如果将日志停掉,是否也能够提高一些效率?
多谢指点~
如果数据非常多非常多,看来使用分区表是需要的,但查询很重要,分区表查询起来会不会比较慢?
另外,上面所说“创建索引 create index axx on 统计表(统计时间,软件编号,软件版本,渠道编号,软件行为)”,这是创建的组合索引吧?
是不是说只需创建一个组合索引就够了?不用创建单列索引了?
如果分区表的话,那查询终归还是问题啊?假如数据有一百亿条了(这的确是可能的),对其进行查询的话,分区表会不会有问题?效率如果跟不上,就必然要多个服务器了吧?
分表是不是不如对表进行分区来的更好呢?我看了一下这个文章:《通过分区(Partition)提升MySQL性能》http://fanqiang.chinaunix.net/db/mysql/2006-05-08/4135.shtml,可以看到效率也是大幅度提升。
请问是不是这样也可以?
又加了30分,请大家多帮助啊,这些问题对于这个网站很关键。多谢!
#8楼 的时候不就让你用分区表了吗?
不要讨论,先把给你的方法试一下。然后有什么问题再讨论。
分区是指将数据量比较大表按照list、range等方式进行分区。每一条符合分区条件的数据将按照分区条件存储在相应的分区中。但是大表分区不一定能解决所有问题。查询速度的快慢关系到的因素较多:数据量、并发的DML、索引类型、SQL语句是否足够优化。但有一点,索引多了并不一定就能解决查询问题,要根据sql中的where字句来决定索引的创建方式和索引类型,以及创建索引的字段。
请问分区能在单个服务器上支持几十亿条数据吗?查询效率能不能保证?其实查询也不是很多,只是总后台查询而已,但还是希望能够保证反应速度不要太慢。
你比我还强,我就几百万条数据,免费版的MYSQL还可以勉强凑活。
不过最近我也一直在研究MYSQL的进一步优化方法的相关文章。
几十亿条数据的话,劝你不要用一个表,另外还需结合orancle, Sphinx 或者 Solr 等第三方引擎辅佐。他们的索引比纯MYSQL的索引要快几十上百倍。
或者还可以看看 MongoDB。
mysql一个子查询只能用一个索引
如果要大数据量可以使用第三方索引工具,楼上说过了