max系统安装mysql_MySql Server系统变量–max-seeking-for-key – 实际例子

我正在浏览MySql索引优化的文档.

我找到了一个设置–max-seeking-for-key = 1000.I检查了MySQL here的“服务器系统变量”.

根据它

“By setting this to a low value (say, 100), you can force MySQL to

prefer indexes instead of table scans”

.

我对FULL TABLE SCAN的理解是:

When a query needs to access most of the rows, reading sequentially is

faster than working through an index. Sequential reads minimize disk

seeks, even if not all the rows are needed for the query.

因此,如果MySQL正在进行最大限度地减少磁盘搜索的全表扫描,为什么会使用–max-seeking-for-key = 1000来优先选择索引扫描,这可能会增加磁盘搜索.

在文档8.3.1.20 How to Avoid Full Table Scan中,它提到了避免全扫描的步骤:使用–max-seeking-for-key = 1000启动mysqld

所以我很想知道是否有任何实际和有意义的使用–max-seeking-for-key.

解决方法:

好吧,我有一个真正的查询在这里由Magento执行,我正在运行MySQL 5.7

SELECT SQL_NO_CACHE

main_table.entity_id

FROM catalog_category_flat_store_2 AS main_table

LEFT JOIN core_url_rewrite AS url_rewrite ON

url_rewrite.category_id = main_table.entity_id

AND url_rewrite.is_system = 1

AND url_rewrite.store_id = 2

AND url_rewrite.id_path LIKE 'category/%'

WHERE main_table.include_in_menu = '1'

AND main_table.is_active = '1'

AND main_table.path LIKE '1/2/%'

ORDER BY main_table.position ASC

当我将max_seeks_for_key设置为670或更低时,查询将在2秒内运行.当值更高(默认情况下非常高)时,查询大约需要6分钟.

是的,我知道这是一个糟糕的问题.我没有写它,它是由Magento电子商务应用程序框架创建的.

我使用EXPLAIN来找到差异.我看到使用低max_seeks_for_key值它使用core_url_rewrite表的索引.具有更高的价值它没有.

MySQL 5.6确实对同一查询使用索引而不对配置进行任何更改.

额外背景:

catalog_category_flat_store_2表包含732条记录.表core_url_rewrite是180万条记录.索引是category_id字段(JOIN字段)上的非唯一索引,基数为571.结果为629行.

不要忘记运行ANALYZE TABLE来帮助MySQL做出正确的决定.

标签:mysql,full-table-scan

来源: https://codeday.me/bug/20190708/1402773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值