我想有一个问题,我面临一个条件,我必须带来的搜索查询参数为基础的结果,我必须在它实现分页太。假设搜索字符串中有百事可乐我的疑问如下
Select * from product where product_title Like '%pepsi%' LIMIT 0,100
表产品有5000万行。所以,我的问题是mysql将如何工作?mysql是不是在产品表中针对关键字pepsi遍历了所有5000万行?如果是这种情况,查询速度会非常慢,即使我添加分页偏移量也会花费很多分钟?
1bqhqjot1#
mysql是不是在产品表中针对关键字pepsi遍历了所有5000万行?是的,但是根据设置,它可能会在网络端阻塞。也就是说,为什么它的点击率要超过100次?你要求0-100,所以点击100次就结束了。如果是这种情况,查询速度会非常慢,即使我添加分页偏移量也会花费很多分钟?是的,在一台30年前的电脑上。在现代机器上,对不起,5000万行是小的。一手的秒听起来更像。哦,很明显,在前100个结果之后就停止了。即使10万个结果也很小。请,把一些像样的现代机器有ssd存储和看东西飞。
r7s23pms2#
您可以做的第一个优化就是避免使用 Select * . 它获取的列(数据)比需要的多,因此阻塞了网络。阅读:为什么选择*被认为是有害的? LIKE '%...%' 将无法使用索引( Like '..%' 可以使用索引)。您可以考虑实现全文搜索。 Limit 子句将确保查询在找到100行中包含pepsi子字符串的行时,将停止扫描更多的行。所以不会那么慢。
Select *
LIKE '%...%'
Like '..%'
Limit
2条答案
按热度按时间1bqhqjot1#
mysql是不是在产品表中针对关键字pepsi遍历了所有5000万行?
是的,但是根据设置,它可能会在网络端阻塞。也就是说,为什么它的点击率要超过100次?你要求0-100,所以点击100次就结束了。
如果是这种情况,查询速度会非常慢,即使我添加分页偏移量也会花费很多分钟?
是的,在一台30年前的电脑上。在现代机器上,对不起,5000万行是小的。一手的秒听起来更像。哦,很明显,在前100个结果之后就停止了。即使10万个结果也很小。请,把一些像样的现代机器有ssd存储和看东西飞。
r7s23pms2#
您可以做的第一个优化就是避免使用
Select *
. 它获取的列(数据)比需要的多,因此阻塞了网络。阅读:为什么选择*被认为是有害的?LIKE '%...%'
将无法使用索引(Like '..%'
可以使用索引)。您可以考虑实现全文搜索。Limit
子句将确保查询在找到100行中包含pepsi子字符串的行时,将停止扫描更多的行。所以不会那么慢。