MySQL自增主键排序问题
2021/5/11 19:27:25
本文主要是介绍MySQL自增主键排序问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
今天遇到一个问题,mysql数据库,在有些场景下,使用自增主键id排序+limit查询时,会很慢。
场景1:表数据50W+,id倒序/升序,limit分页,结果集<=10,耗时 0.9~1.4秒,不分页耗时100~180毫秒.
备注:结果集数量越小,查询速度越慢。
如下SQL
SELECT id, corp_id, org_id, bill_code, bill_maker, product_key_id, latest, reject_and_submit_status, audit_status, sku_id, enable_flag, special_num, special_period, special_flag, batchno_flag, medicine_flag, erp_product_type, zdyh_flag, creator, ts, modify_date, modifier, yn, common_name, product_zjm, product_name, medicine_type, product_type, dosage_form, dosageform_str, specification, unit, unit_str, storage_condition, bar_code, pzwh, pzwhqx, producer, production_place, expire_date, bzcpsms, zlzxbz, mah, yfyl, syz, buyer, sn_flag, sfylqx, input_vat, output_vat, vc_medicine_flag, new_specific_flag, cold_chain_flag, storage_mode, min_temperature, max_temperature, submit_date, storage_location_code, storage_location_name, proof_code, elqxzjyfl, drug_safety_product_id, drug_safety_standard_code, prescription_flag, store_property FROM my_table WHERE org_id=180 AND audit_status IN (3,-2) AND yn = 1 AND ( sku_id LIKE CONCAT("%",'100001727506',"%") OR common_name LIKE CONCAT("%",'100001727506',"%") OR product_zjm LIKE CONCAT("%",'100001727506',"%")) ORDER BY id DESC
场景2:表数据50W+,id倒序,limit分页,结果集>=10000,耗时 30~50毫秒,不分页耗时500~600毫秒.
场景2:表数据50W+,id升序,limit分页,结果集>=10000,耗时 200~300毫秒,不分页耗时500~600毫秒.
备注:结果集数量越大,查询速度越快
SELECT id, corp_id, org_id, bill_code, bill_maker, product_key_id, latest, reject_and_submit_status, audit_status, sku_id, enable_flag, special_num, special_period, special_flag, batchno_flag, medicine_flag, erp_product_type, zdyh_flag, creator, ts, modify_date, modifier, yn, common_name, product_zjm, product_name, medicine_type, product_type, dosage_form, dosageform_str, specification, unit, unit_str, storage_condition, bar_code, pzwh, pzwhqx, producer, production_place, expire_date, bzcpsms, zlzxbz, mah, yfyl, syz, buyer, sn_flag, sfylqx, input_vat, output_vat, vc_medicine_flag, new_specific_flag, cold_chain_flag, storage_mode, min_temperature, max_temperature, submit_date, storage_location_code, storage_location_name, proof_code, elqxzjyfl, drug_safety_product_id, drug_safety_standard_code, prescription_flag, store_property FROM my_table WHERE org_id=180 AND audit_status IN (3,-2) AND yn = 1 AND ( sku_id LIKE CONCAT("%",'1',"%") OR common_name LIKE CONCAT("%",'1',"%") OR product_zjm LIKE CONCAT("%",'1',"%")) ORDER BY id desc limit 20
具体原因:未查明....
结论:不要使用id排序与limit一起使用,如果需要,请做足场景测试,有效利用,避免出现慢SQL
这篇关于MySQL自增主键排序问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20部署MySQL集群入门:新手必读指南
- 2024-11-20部署MySQL集群教程:初学者指南
- 2024-11-20部署MySQL集群项目实战:新手教程
- 2024-11-20部署MySQL集群资料:新手入门教程
- 2024-11-20MySQL集群部署教程:入门级详解
- 2024-11-20MySQL集群教程:入门与实践指南
- 2024-11-20部署MySQL集群教程:新手入门指南
- 2024-11-20MySQL读写分离教程:轻松入门
- 2024-11-20部署MySQL集群入门:一步一步搭建你的数据库集群
- 2024-11-19部署MySQL集群学习:入门教程