mysql 千万级数据 优化查询速度

哎呀,这个SQL语句真让我头疼。
像“%abc%”一样使用它。
老实说:数据库索引只是装饰品。
我之前在整理数据库碎片时遇到过这种情况。
当时我很困惑,但后来我渐渐明白了。

看吧,在MySQL这样的数据库中,如果在类似的情况下以%开头,索引将不会被使用。
这就像去图书馆找书一样。
本来想用索引来快速查找,结果发现索引里的书都借了,还得一本一本地看。

对表进行分区是一回事,但对表进行分区就没那么简单了。
应该根据实际情况来划分。
例如,如果您有大量数据,您可能需要将其拆分为许多表。
但从你描述的情况来看,你可能不需要走那么远。
您可能需要根据用户进行搜索,这可能更合适。

我的建议是尝试添加一个条件,如 userid=?到你的 SQL 语句。
,然后使用 userid 作为索引。
这使得数据库能够更快地查找数据。
我之前在一个项目中做过这样的事情,效果非常好。

不过,这只是一个建议,具体实施还要根据您的实际情况而定。
毕竟,每个项目都有自己的特点。

mysql,有一张表里面已经有几千万条数据了,网页访问时极其缓慢,如何提高检索速度?

嘿,你是对的。
当我刚进入这个行业时,我也曾为提问陈述而苦恼过。
记得2 005 年我在上海一家公司做一个项目,当时数据库是Oracle 1 0g。
有一个报表查询,用户总是抱怨太慢。
当我看到时,查询语句是在特定时间检查特定用户的模块,fromfact_data select user='a' and module='b' and dtime Between '2 01 2 -1 1 -01 00:1 0:00' and '2 01 2 -1 1 -01 00:1 1 :1 0'。
表进出的数据量非常恐怖,有几千万条。

当时我认为应该指出这一点。
我创建了一个共享索引,表fact_data添加索引i_merge(user, module, dtime),现在我添加了。
添加索引后,我要求用户再次运行查询并使用解释模式(当时是Oracle和MySQL EXPLAIN)。
你猜怎么着?一目了然地解释在没有索引的情况下扫描了多少行以及扫描整个表需要多长时间。
它像蜗牛一样缓慢。
添加索引后,说明全表扫描消失了,是索引查找。
快速(user='a',module='b')获取类,然后获取句柄的dtime索引之间的数据。
速度顿时快了几个数量级。

你说得对,尤其是数据量很大的时候,比如整个表几千万条,你验证的数据可能只有1 /1 000。
如果没有索引,就必须扫描整个表,这需要几分钟的时间。
添加索引后,直接获取1 /1 000的数据,时间就下降了。
我当时就尝试了一下。
对于相同量的数据,在不建立索引的情况下运行了 3 0 秒,但在建立索引的情况下运行时间不到 1 秒。
这个差距不小。

所以在你提到的情况下,添加通用索引和解释看执行计划是基本技能,应该仔细记住。
不过现在数据库技术发展很快,一些新的数据库可能会得到更好的优化。
我必须注意这一点,但基本还是一样的。