duanli6834 2013-11-15 23:14
浏览 382
已采纳

简单查询导致高数据库CPU使用率

I have the following simple MySQL query:

SELECT COUNT(*) FROM images WHERE path LIKE '%/path/to/image.jpg'

The field path has an index. Table has about 500,000 records.

Although the query takes less than a millisecond to execute, I am watching the CPU usage for MySQL ratchet higher and higher in the process list even though this is the only query. Eventually it climbs to 99%.

The only other thing the script does is increment a simple counter and then delete a file if the corresponding entry doesn't exist in the database.

The PHP code itself only uses a tiny bit of the CPU (0.3%) according to profiling.

I tried dropping it down to only do the first 5,000, but the script never finishes. I just see a blank page despite buffer flushes that are supposed to show me the progress every 25 records.

What could cause this sort of MySQL CPU usage increase over the same sort of super simple query?

  • 写回答

3条回答 默认 最新

  • dseslyh6662605 2013-11-15 23:25
    关注

    The field path has an index.

    The index is useless for such a query. Btree indexes can only be used with LIKE when the LIKE argument contains variable postfix (LIKE 'something%'). They are not used with variable prefixes (LIKE '%something'). You can check the EXPLAIN your_query_here, there you will see that the query uses full table scan.

    So the answer is, your MySQL eats CPU searching through the table (it's likely the table fits entirely in memory, so it's still pretty fast).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误