• 同样的sql语句,数据不一样导致有些命中索引、有些没有


    表结构

    CREATE TABLE `llt_orders` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `uuid` char(36) COLLATE utf8mb4_unicode_ci NOT NULL,
    `status` tinyint(3) unsigned NOT NULL DEFAULT '0',
    `type` tinyint(3) unsigned NOT NULL,
    `order_id` int(10) unsigned DEFAULT NULL,
    `order_number` bigint(20) DEFAULT NULL,
    `pharmacy_id` int(10) unsigned DEFAULT NULL,
    `user_id` int(10) unsigned NOT NULL,
    `subtotal` decimal(10,2) NOT NULL,
    `vendor_id` int(10) unsigned DEFAULT 0,
    `note` text COLLATE utf8mb4_unicode_ci NOT NULL,
    `count_status` int(10) unsigned DEFAULT NULL,
    `created_at` timestamp NULL DEFAULT NULL,
    `updated_at` timestamp NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `orders_order_number_unique` (`order_number`),
    KEY `orders_user_id_foreign` (`user_id`),
    KEY `orders_order_id_foreign` (`order_id`),
    KEY `orders_pharmacy_id_foreign` (`pharmacy_id`),
    KEY `vendor_id` (`vendor_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6091 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    没命中索引
    EXPLAIN SELECT * from llt_orders WHERE vendor_id in ( 13 , 44 )

    EXPLAIN SELECT * from llt_orders WHERE vendor_id > 13 and vendor_id < 44

    EXPLAIN SELECT * from orders WHERE vendor_id BETWEEN 13 and 44 

    这个命中索引
    EXPLAIN SELECT * from llt_orders WHERE vendor_id in ( 21 , 45 );

  • 相关阅读:
    Django-01
    tkinter模块常用参数(python3)
    Python3 数据可视化之matplotlib、Pygal、requests
    python面试题(二)
    python 面试题(一)
    Python 用Redis简单实现分布式爬虫
    用python的正则表达式实现简单的计算器功能
    Python操作 RabbitMQ、Redis、Memcache
    自定义线程池
    21天学通Python课后实验题4.6
  • 原文地址:https://www.cnblogs.com/fengliang/p/13846554.html
Copyright © 2020-2023  润新知