热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

请问MySQL查询时只会使用一个索引吗?

请问大家: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 个解决方案

#1


where后面的所有字段都加索引

#2


这个最好每天一张表  表明后面加日期后缀即可

#3


每天生成一张表?那统计的时候会不会很麻烦?而且几年后岂不是有上千张表了?

#4


围观  学习

#5


引用 3 楼 djj0628 的回复:
每天生成一张表?那统计的时候会不会很麻烦?而且几年后岂不是有上千张表了?

不会  用每天的表生成粗略的统计信息到一张统计表里  这样统计数据可以从这个粗略的统计表里再计算出来

#6


一天一张表实在浪费,我想可以根据数据弄成一个星期或一个月甚至一个季度一张表?不过具体怎么操作的,还请ls多指教啊,给出相关文章链接地址也可。加分到50~~

#7


引用
请问大家:MySQL查询时只会使用一个索引吗?就是说无论你建了几个索引,mysql系统只会选择一个来使用吗?
是的。

#8


引用
请问大家:MySQL查询时只会使用一个索引吗?就是说无论你建了几个索引,mysql系统只会选择一个来使用吗?
是的。

1) 使用分区表
2)  创建索引 create index axx on 统计表(统计时间,软件编号,软件版本,渠道编号,软件行为)

#9


另外我还想问一个问题,就是我在一个点连续给一个表插入数据,假如每秒能够插入5000条左右,请问假如插入换成了全国各地分散的点,那么恐怕一秒钟无法再承载5000条插入?
那么请问怎么样提高各地分散的点的插入效率,比如是否需要建立所谓的连接线程缓存(Thread_Cache池)?会不会有效果?再比如是否需要缓存表的句柄?这样每个插入的用户就不用重复打开表了?另外就是在插入的时候,系统是否会自动写日志,那么如果将日志停掉,是否也能够提高一些效率?
多谢指点~

#10


如果数据非常多非常多,看来使用分区表是需要的,但查询很重要,分区表查询起来会不会比较慢?

另外,上面所说“创建索引 create index axx on 统计表(统计时间,软件编号,软件版本,渠道编号,软件行为)”,这是创建的组合索引吧?
是不是说只需创建一个组合索引就够了?不用创建单列索引了?

#11


如果分区表的话,那查询终归还是问题啊?假如数据有一百亿条了(这的确是可能的),对其进行查询的话,分区表会不会有问题?效率如果跟不上,就必然要多个服务器了吧?

#12


试一下再分析。

#13


引用 6 楼 djj0628 的回复:
一天一张表实在浪费,我想可以根据数据弄成一个星期或一个月甚至一个季度一张表?不过具体怎么操作的,还请ls多指教啊,给出相关文章链接地址也可。加分到50~~

也可以  你可以通过调用存储过程来保证程序不用更改  或者直接在程序逻辑里面改好   拼一个带日期的sql发送给数据库

#14


分表是不是不如对表进行分区来的更好呢?我看了一下这个文章:《通过分区(Partition)提升MySQL性能》http://fanqiang.chinaunix.net/db/mysql/2006-05-08/4135.shtml,可以看到效率也是大幅度提升。

请问是不是这样也可以?

#15


分表是程序负责 但是能让你更容易掌控

#16


引用 15 楼 rucypli 的回复:
分表是程序负责 但是能让你更容易掌控


只是考虑存储的话,分表当然是很好的选择,但还是考虑到查询啊,我就是不知道分表对于查询效率是否会有影响?甚至能像分区那种在很多时候提高查询效率?

#17


又加了30分,请大家多帮助啊,这些问题对于这个网站很关键。多谢!

#18


#8楼 的时候不就让你用分区表了吗?

不要讨论,先把给你的方法试一下。然后有什么问题再讨论。

#19


引用 18 楼 acmain_chm 的回复:
#8楼 的时候不就让你用分区表了吗?

不要讨论,先把给你的方法试一下。然后有什么问题再讨论。

不好意思,我还没有搞懂你说的分区表究竟是分区还是分表,我现在了解到它们是不同的。


我在网上看到一句话:“如果单机的cpu能够承受站点的并发数,应该选择分表的方式,因为分表相对简单,容易实现scale,而且涉及到多表连接时,分区是不能直接使用join的。但如果站点并发数太大,需要多个cpu来访问多个数据库是无疑的,这时需要选择分区的方式。”

如果是这样的话,我想我们前期只使用一台服务器就应该能够承受并发,这样看来,分表将是更好的选择。

#20


分区是指将数据量比较大表按照list、range等方式进行分区。每一条符合分区条件的数据将按照分区条件存储在相应的分区中。但是大表分区不一定能解决所有问题。查询速度的快慢关系到的因素较多:数据量、并发的DML、索引类型、SQL语句是否足够优化。但有一点,索引多了并不一定就能解决查询问题,要根据sql中的where字句来决定索引的创建方式和索引类型,以及创建索引的字段。

#21


 分区吧··

#22


请问分区能在单个服务器上支持几十亿条数据吗?查询效率能不能保证?其实查询也不是很多,只是总后台查询而已,但还是希望能够保证反应速度不要太慢。

#23


你比我还强,我就几百万条数据,免费版的MYSQL还可以勉强凑活。

不过最近我也一直在研究MYSQL的进一步优化方法的相关文章。

几十亿条数据的话,劝你不要用一个表,另外还需结合orancle, Sphinx 或者 Solr 等第三方引擎辅佐。他们的索引比纯MYSQL的索引要快几十上百倍。

或者还可以看看 MongoDB。

#24


该回复于2011-12-05 09:01:42被版主删除

#25


mysql一个子查询只能用一个索引
如果要大数据量可以使用第三方索引工具,楼上说过了

推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了在MySQL8.0中如何查看性能并解析SQL执行顺序。首先介绍了查询性能工具的开启方法,然后详细解析了SQL执行顺序中的每个步骤,包括from、on、join、where、group by、having、select distinct、union、order by和limit。同时还介绍了虚拟表的概念和生成过程。通过本文的解析,读者可以更好地理解MySQL8.0中的性能查看和SQL执行顺序。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • Explain如何助力SQL语句的优化及其分析方法
    本文介绍了Explain如何助力SQL语句的优化以及分析方法。Explain是一个数据库SQL语句的模拟器,通过对SQL语句的模拟返回一个性能分析表,从而帮助工程师了解程序运行缓慢的原因。文章还介绍了Explain运行方法以及如何分析Explain表格中各个字段的含义。MySQL 5.5开始支持Explain功能,但仅限于select语句,而MySQL 5.7逐渐支持对update、delete和insert语句的模拟和分析。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
author-avatar
霍邱宋涛_842
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有