MySQL-解决在一个百万级数据库中读取数据效率问题?

发布于 2017-01-06 19:04:55 字数 309 浏览 1497 评论 8

在一个百万级的数据表中,有个表的 status 字段 以0 和 1 区分,另一个字段 type 也是 0 和 1 代表问题和答案,且这两个字段做了多列索引做以下查询

SELECT * FROM data where type = 0 and status=1 limit 1

效率极低,直接导致数据库没响应!

不知这个数据库要怎么设计,怎么查询才能提高效率!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

偏爱自由 2017-10-07 10:42:23

这两个字段建立索引没什么用,反而占资源。
可以考虑拆表。

泛泛之交 2017-10-01 02:41:11

并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

虐人心 2017-07-18 05:45:02

select * from data inner join(select id from select_table where type = 0 and status=1 limit 100,1) using(id),id表示主键,select_table查询的辅助表,在考虑limit时不需要扫描全表,这样效果好点,不过100万数据取后面的效果估计还是不好的,我觉得更应该考虑查找数据的需求是什么,根据需要选择好的设计方法

甜柠檬 2017-06-23 23:49:04

不要在status 和type做索引,达不到你的目的.查询结果集不要太大.你的是结果集太大.

偏爱自由 2017-05-28 17:15:22

数据的变化不超过10个不建议建立索引,因为索引本身也会耗费资源。查询数据的时候尽量不要select * 你需要什么值就取什么值。

瑾兮 2017-05-25 10:33:18

你的表中是不是有text或是blob的字段。返回值很大会造成读取慢。
赞同这个说法, 我也遇到过这样的问题。 所做的就是把大字段拆为附属表。

夜无邪 2017-04-26 08:46:49

你查一张百万级数据的表,过滤条件只这两个,取出来要做什么用,这两个字段基本是都是bit型的,加多列索引查也不会有什么大的效果,如果取这些数据的结果集做其他数据集的子集,建议将该表与其他表联接取相应的列。如果不做联查,可以只取表中关键的列,放到临时表中,做结果集。取时 表名后加上with (nolock) 选项。

想挽留 2017-01-15 23:11:11

只有两个值的索引没必要建,建好也是效率没很大提升,要不把表按status和type分表

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文