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条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料