gpt4 book ai didi

mysql - 我需要加快对大表的特定 mysql 查询

转载 作者:可可西里 更新时间:2023-11-01 07:59:29 25 4
gpt4 key购买 nike

您好,我知道有很多主题专门讨论查询优化策略,但是这个主题太具体了,我在互联网上的任何地方都找不到答案。

我在 eshop 中有一个很大的产品表(大约 180k 行)并且该表有 65 列。是的是的我知道很多,但我在那里存储有关书籍、DVD、蓝光和游戏的信息。

我仍然没有考虑在查询中使用很多列,但是选择仍然很棘手。需要考虑和比较的条件有很多。下面查询

SELECT *
FROM products
WHERE production = 1
AND publish_on < '2012-10-23 11:10:06'
AND publish_off > '2012-10-23 11:10:06'
AND price_vat > '0.5'
AND ean <> ''
AND publisher LIKE '%Johnny Cash%'
ORDER BY bought DESC, datec DESC, quantity_storage1 DESC, quantity_storege2 DESC, quantity_storage3 DESC
LIMIT 0, 20

我已经尝试在 where 子句中的 cols 上一个一个地放置索引,甚至在 order by 子句中,然后我尝试在 (production, publish_on, publish_off, price_vat, ean) 上创建复合索引。

查询仍然很慢(几秒钟),它需要更快,因为它的 eshop 解决方案和人们因为没有快速得到结果而离开。而且我仍然没有计算我需要对所有找到的行执行搜索以便进行分页的时间。

我的意思是,使其快速的最佳方法是简化查询,但在这种情况下所有条件和排序都是必须的。

任何人都可以帮助解决此类问题吗?是否有可能加快这种查询的速度,或者是否有任何其他方法可以简化查询并将其余部分留在 php 引擎上以对结果进行排序..

哦,我真的对此一窍不通..请分享您的智慧...

提前致谢

最佳答案

首先确定你要选择的是什么,然后擦掉'*'

Select * from

有更具体的东西

Select id, name, ....

你的表中没有 Join 或其他任何东西,所以我认为加速选项非常小。

  1. 检查您的 mysql 服务器是否可以使用足够的内存。看看你的 my.cnf 中的这个 confis

    • key_buffer_size = 384M;
    • myisam_sort_buffer_size = 64M;
    • thread_cache_size = 8;
    • query_cache_size = 64M
  2. 查看最大允许并发数。 mysql推荐CPU的*2

    thread_concurrency = 4

  3. 您真的应该考虑根据您使用的信息和标准规范化拆分表格。如果可能的话。

  4. 如果它是一个无法拆分表的高效系统,请考虑使用缓存服务器。但这仅在您有大量相同的重复查询时才有用。

这就是我对底层实现或系统一无所知时会做的事情。

编辑:使尽可能多的列可索引不一定会加速您的系统。索引越多≠速度越快。

关于mysql - 我需要加快对大表的特定 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13048951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com