����λ�ã���ҳ > �����̳� > �̳� > count(*)��count(1)�ĸ����죿���Ա��ʣ�ͨ��������ʮ������MySQL����������

count(*)��count(1)�ĸ����죿���Ա��ʣ�ͨ��������ʮ������MySQL����������

��Դ������������|��ʱ�䣺2024-10-21 09:45:56 |���Ķ���129��|�� ��ǩ�� T �� S C ���� ���� �� |����������

һ�������������Count(*)��Count(1)�ģ� ��������û�����𣬲�Ҫ���� count() ����ȫ���ֶΣ��� count(1) ���ᡣ���� count() ������������ MySQL ���߻���ô���� ���Ժ���ȷ�ظ������� count() �� count(1) ��һ���ģ�����ȷ���������

һ�������������Count(*)��Count(1)�ģ�

��������û�����𣬲�Ҫ���� count( ) ����ȫ���ֶΣ��� count(1) ���ᡣ���� count( ) ������������ MySQL ���߻���ô����

���Ժ���ȷ�ظ������� count( ) �� count(1) ��һ���ģ�����ȷ��������� count(�ֶ�)������� count() ���Ǿ�����ֶΣ���ô MySQL ���ж�ij�м�¼�ж�Ӧ�ֶ��Ƿ�Ϊ null�����Ϊ null �Ͳ������ͳ���ˡ���� count(�ֶ�) �Ľ�����ܻ�С�� count( ) �� count(1)��

���⣬ֱ��ִ�� select (*) from t1; ʱ��Ҳ�������õ������ģ�����һ����ȫ��ɨ�裬Ҳ����ɨ��ij������ B+ ����Ҷ�ӽڵ㣬�Ӷ��õ�����������Ϊ������ʲô�����������������Ǹ���������ʵ����������Ҷ�ӽڵ��������һ���ģ�ֻ�����ֶ�����һ����������������ȫ���ֶΣ�����������ֻ���˶���������ֶ� + �����ֶΣ�����ͨ�����������Ǹ�ռ�ÿռ�ģ���˱�������Ҳ����죬���Ǽ�¼������һ���ġ�

�������������������ǰ׺ԭ��ģ�

���ԭ�������ֻ���ڸ�����������ಿ�ֵ����ϣ��������ܱ��Ż������仰˵����ʹ�ø�������ʱ����ѯ������Ӧ�ô�������������п�ʼ�����������������

���Ǵ���һ���򵥵�ʾ����������Ϊ employees ���������ϴ���һ���������������ṹ���£�

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    age INT,
    department VARCHAR(50),
    INDEX idx_name_age (last_name, first_name, age)
);

�����������Dz���һЩʵ������

INSERT INTO employees (first_name, last_name, age, department) VALUES
('John', 'Doe', 30, 'HR'),
('Jane', 'Doe', 25, 'IT'),
('Mary', 'Smith', 35, 'Finance'),
('Michael', 'Johnson', 40, 'IT'),
('Emily', 'Davis', 29, 'HR');

��������ǰ׺ԭ��IJ�ѯSQL

SELECT * FROM employees WHERE last_name = 'Doe' AND first_name = 'Jane' AND age=25;
SELECT * FROM employees WHERE  first_name = 'Jane' AND last_name = 'Doe' AND age=30;
SELECT * FROM employees WHERE  age=30 AND last_name = 'Doe' AND first_name = 'Jane';

����������Щ��ѯ��MySQL��ʹ��idx_name_age�����������ܹ�����������SQL��������������Where����˳��û�й�ϵ

+----+-------------+-----------+-------+---------------+---------+---------+------+-------+-------------+
| id | select_type | table     | type  | possible_keys | key     | key_len | ref  | rows  | Extra       |
+----+-------------+-----------+-------+---------------+---------+---------+------+-------+-------------+
|  1 | SIMPLE      | employees | range | idx_name_age  | idx_name_age | 100     | NULL |     2 | Using where |
+----+-------------+-----------+-------+---------------+---------+---------+------+-------+-------------+

�����ִ�мƻ��У����ǿ���type��range��˵��MySQL����ʹ��idx_name_age����������ֻ����˴�Լ2�����ݡ�

�������last_nameȥ���أ�

����������ǰ׺ԭ��IJ�ѯ

SELECT * FROM employees WHERE first_name = 'Jane' AND age = 25;

���������ѯ��MySQL����ʹ�ø�������idx_name_age����Ϊ��û�д���������last_name��ʼ��

ͨ��Explainִ�мƻ����鿴����ִ�����

+----+-------------+-----------+-------+---------------+------+---------+------+-------+-------------+
| id | select_type | table     | type  | possible_keys | key  | key_len | ref  | rows  | Extra       |
+----+-------------+-----------+-------+---------------+------+---------+------+-------+-------------+
|  1 | SIMPLE      | employees | ALL   | NULL          | NULL | NULL    | NULL |     5 | Using where |
+----+-------------+-----------+-------+---------------+------+---------+------+-------+-------------+

�����ִ�мƻ��У����ǿ���type��ALL������ζ��MySQLû��ʹ���κ����������ǽ�����ȫ��ɨ�裬����Ч�ʽϵ͡�

����������һ�ݰ������д��ˢ��ʼǣ�һ���Ӵ�ͨ���ҵ��ζ�����������ԭ��û��ô�ѡ����Ǵ���д�ģ� 7701ҳ��BAT����д��ˢ��ʼǣ�����offer�õ�����

�ܽ�

������Կ�������ν������ǰ׺ԭ��ġ����󡱣�������ָwhere�����е�last_nameһ��Ҫ������ߣ�����ָwhere������һ��Ҫ������������������������ֶΣ��������Ƕ��塰last_name, first_name, age������������SQLΪ��

INDEX idx_name_age (last_name, first_name, age)

����last_name�ֶ�������ߵ��ֶΣ���������Ҫ��idx_name_age��������ôSQLһ��Ҫ����last_name�ֶε�����������ǡ����󡱵���˼��

���������������������GAP�����ٽ����ģ�

1������

�����ǶԾ��������е�����������������񲢷�������ͬ�У�ֻ����ͬһ���Ͻ���д��ʱ�Ż�������������

�������������±��ṹ�����ݣ�

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    age INT,
    department VARCHAR(50)
);

�������A������ij���ض�Ա������Ϣ��

-- ����A
START TRANSACTION;
UPDATE employees SET age = 31 WHERE last_name = 'Doe';

����������У������ᱻ����last_name = 'Doe'����Ӧ�����ϣ���John��Jane���������ʱ����B���Ը���ͬһ�У�

-- ����B
START TRANSACTION;
UPDATE employees SET age = 29 WHERE last_name = 'Doe';

����B�ᱻ������ֱ������A�ύ��ع�,��Ϊ����A������B�ӵĶ�����������Ҳ�б���������������ȷ�������ݵ�һ���ԡ�

GAP��

����������ijһ�У���GAP����������ǰ��ļ�϶��ע��ֻ����ǰ��ļ�϶������ܻ����DZ������һ��ǰ���м�϶�������һ�к���ļ�϶������

��Ȼ�����ˣ�ֻ�������ǽ�����һ������PAGE_NEW_SUPREMUM�ļ�¼��˵�����������ΪPAGE_NEW_SUPREMUM��¼��InnoDBĬ�ϵģ����̶���Ϊ���һ����¼�����ֻҪ��סPAGE_NEW_SUPREMUMǰ��ļ�϶�����൱����ס����������������һ�к���ļ�϶��

count(*)¡¢count(1)Äĸö¸ü¿ì£¿ÃæÊÔ±ØÎÊ£ºÍ¨ÏüÕûÀíµÄÊ®µÀ¾­µäMySQL±ØÎÊÃæÊÔÌâ

�ٽ�����Next-Key Lock��

�ٽ�����������GAP���Ľ�ϣ�����������������Լ���֮��Ŀ�϶��������ȷ����һ����Χ�ڵIJ�ѯ�У�������ֹ�˻ö������ܱ���������

����ʹ��֮ǰ�����ӣ���������ִ�������²���:

-- ����D
START TRANSACTION;
SELECT * FROM employees WHERE last_name >= 'D' FOR UPDATE;

�ڴ˲�ѯ�У�MySQL�������last_nameΪ'D'�������м���������ͬʱ��'D'֮ǰ�Ŀ�϶����GAP�����������Է�ֹ�ڸ÷�Χ�ڲ����µ��С�

�ġ������������MVCC�ģ�

OCRʶ����������һЩ����ͻ��ң��������ݲ�����������Ȼʶ���Ǻ����룬���ҽ������ҵ���������֪ʶ��������ͼƬ���ܴ�������ݡ�

�������MVCC��

��νMVCC���Ƕ�汾�������ƣ�MySQLΪ��ʵ�ֿ��ظ���������뼶�𣬶���Ϊ�˲�������������ʵ�ֿ��ظ��������Բ���MVCC������ʵ�֡�

��Ҫ����

  1. ReadView����ȡ��ͼ�� ��

    • ��һ������ʼʱ��MVCC�ᴴ��һ�� ReadView ������ͼ��¼�˵�ǰ�ɼ������а汾��������Щ�����ǻ�Ծ�ģ���Щ�����Ѿ��ύ��
  2. ����ID ��

    • ÿ��������һ��Ψһ������ID���� ReadView �У����¼��ǰ�����ID��������ID���������ID��
  3. �ɼ��Թ��� ��

    • ���һ�������ID ��
      1. ���� ReadView �е��������ID���������ĸ��ĶԵ�ǰ���񲻿ɼ���
      2. ���� ReadView �еĻ�Ծ�����������ĸ��IJ��ɼ�����Ϊ�������ڽ����С�
      3. С�� ReadView �е���С����ID��������ĸ����ǿɼ��ģ���Ϊ���Ѿ��ύ��

MVCC��������

  • ���� ReadView ��

    • ������ʼʱ��MVCC������һ�� ReadView �����������ǰ�����ID����Ծ�����ID�Լ�������С����ID��
  • ��ȡ���� ��

    • �������ȡ����ʱ�������ο� ReadView �е���Ϣ����ȷ����Щ�汾�������ǿɼ��ġ�
  • �������� ��

    • �������������ʱ��MVCC����ֱ�Ӹ���ԭ�е����ݣ����Ǵ���һ���µİ汾��ֻ�����������ø����ݵ�������ɺ󣬲Ż������ɰ汾��

count(*)¡¢count(1)Äĸö¸ü¿ì£¿ÃæÊÔ±ØÎÊ£ºÍ¨ÏüÕûÀíµÄÊ®µÀ¾­µäMySQL±ØÎÊÃæÊÔÌâ

�ܽ�

MVCC������������ڲ����ű˴˵������ͬʱ���в������⼫�����������ݿ�IJ������ܡ�ͨ��ά�����ݵĶ���汾��MVCC��֤�����ݵ�һ���Ժ͸����ԣ�ͬʱ���������ľ�����

����������һ�ݰ������д��ˢ��ʼǣ�һ���Ӵ�ͨ���ҵ��ζ�����������ԭ��û��ô�ѡ����Ǵ���д�ģ� 7701ҳ��BAT����д��ˢ��ʼǣ�����offer�õ�����

�塢�����������Online DDL�ģ�

Online DDL ��ָ�ڲ�Ӱ�����ݿ���������£��޸����ݿ���Ľṹ��ͨ�׵�˵���������ǿ��������ݿ�����������ͬʱ���Ա����е��������������С��޸��ֶ����͡����������ȣ�������Ҫͣ��ά����

���DDL��������������һ���ֶΣ��������¼�������

1. ��������

MySQL ���Ȼ�� DDL �����н�����ȷ���﷨��ȷ�����磺

ALTER TABLE users ADD COLUMN age INT;

MySQL ����� users �Ƿ���ڣ������� age �ֶ��Ƿ������е��ֶγ�ͻ�������ֶ����ظ��������������Ƿ�֧�ֵȡ�

2. ����Ԫ��������metadata lock��

�ڽ����κα��ṹ���֮ǰ��MySQL ��Ա���һ��Ԫ��������MDL����Ԫ�������������Ƿ�ֹ�ڱ���ṹ��ͬʱ������ DDL �����Ա������޸ģ���֤���ṹһ���ԡ�

��� ��Ԫ�����������ڳ�����װ����ʱ����ֹ������Ҳ��ͬʱ���Ļ���λ�ã�������ҡ�

3. ������ʱ��

������ִ�� ALTER TABLE ���ʱ��MySQL �ᴴ��һ�� ��ʱ�� �������ʱ�������б���һ������Ʒ�����һᰴ�����ǵ�Ҫ�������µ��ֶΡ�

��ʱ���IJ��裺

  1. ����ԭ���ṹ ��MySQL �Ḵ��ԭ���Ľṹ��һ����ʱ���У������������������ֶΣ����� age ��
  2. �������� ��MySQL ��ԭ���е��������������и��Ƶ���ʱ���У�ͬʱΪÿһ������������ֶε�Ĭ��ֵ������У���

��� ��������л�������ʱ�����ڲֿ���һ���µĻ���ģ�ͣ�������ͬ����Ʒ��ͬʱ�����µ���Ʒ�������

4. ���

�� MySQL ��������ݸ��ƺ����Ὣԭ������ʱ�������滻����ʱ����ʱ���������ʽ�ı������������ֶΡ�

  • ����������У����е� DML����ɾ�IJ飩����������ʱ������ֱ���滻��ɡ����ʱ��ܶ��ݣ��Է����Ӱ��dz�С��

��� ������ֿ�����»��ܴ�ú󣬰���������У�ͬʱ�滻���ɻ��ܡ��˿ͼ�����������������̡�

5. ɾ���ɱ�

ԭʼ�ı����±��滻��MySQL ���Զ�ɾ���ɱ���Ԫ���ݣ��ͷſռ䡣��һ���ں�̨��ɣ���Ӱ�����ݿ������������

6. �ͷ���

�����в�����ɺ�MySQL ���ͷ�Ԫ���������������� DDL �� DML �����������С�

�ܽ᣺

  1. ������䲢���Ϸ��ԡ�
  2. �Ա���Ԫ����������ֹ��ͻ�Ľṹ�������
  3. ������ʱ�����������ݴӾɱ����Ƶ���ʱ����
  4. �滻�ɱ���ɾ���ɱ���Ԫ���ݡ�
  5. �ͷ�����

ע�� �����ַ����� ��ʹ�� Online DDL ������£����ܵ��´��������ݸ��Ʋ�����������������Ӱ�죬�����DZ��������ϴ�ʱ��

������֪����Щ����»ᵼ������ʧЧ

�� MySQL �У���������߲�ѯЧ�ʵĹؼ����ߣ�����ʱ���ܻ��������� ʧЧ ����������²�ѯ���ܴ���½����������ͨ�����ѯ����д�����������͵�ѡ���Լ����ݿ���Ż������йء������Ǽ��ֳ����ᵼ������ʧЧ�ij�����

1. ʹ�� LIKE ʱͨ�������ǰ��

����� LIKE ����У�ͨ��� % �����ַ����Ŀ�ͷ���ᵼ������ʧЧ����Ϊ����������£�MySQL �޷�ͨ���������ٶ�λ�����������ļ�¼������Ҫɨ�����м�¼��

ʾ����

SELECT * FROM users WHERE name LIKE '%abc';  -- ����ʧЧ

����д����ʹ�� MySQL ɨ��ȫ���������д�� LIKE 'abc%' ��������Ȼ��Ч��

��� �����������һ����ļ��в���������"abc"��ͷ���ļ����������ֱ���ҵ���Ӧ�IJ��֣�������Dz������ְ���"abc"���ļ�����͵ÿ�ÿ���ļ�����

2. �������Ͳ�һ��

����ѯ�����е��ֶ������������ֶε����Ͳ�һ��ʱ��MySQL ���ܲ���ʹ�������������ȶ����ݽ�������ת����������ת���ᵼ���޷���Ч����������

ʾ����

���� id ��һ�������ֶΣ�

SELECT * FROM users WHERE id = '123';  -- ����ʧЧ

����� '123' ���ַ�����MySQL �������ʽת�����������ʧЧ��

3. �������ֶ�ʹ�ú���

����ڲ�ѯ�ж������ֶ�ʹ���˺��������������MySQL ����ͨ����������ѯ����������ʧЧ��

ʾ����

SELECT * FROM users WHERE YEAR(created_at) = 2023;  -- ����ʧЧ

���� YEAR(created_at) �Ƕ� created_at �ֶν����˺������������ MySQL �޷�ֱ��ʹ���������в��ҡ�

��� ����������밴ij�ֹ������е��б��в������ݣ�������Ҫ�ȸı�������ʽ�����ҵ�������Ч���½���

4. ʹ�� OR �ؼ���

�� OR �����е�ijһ��û������ʱ��������ѯ����������ʧЧ��

ʾ����

SELECT * FROM users WHERE id = 1 OR name = 'Alice';  -- ����ʧЧ

���� id ������������ name ��û����������ô�����ѯ�Ͳ�������������MySQL ��Ҫ����ȫ��ɨ�衣

�Ż���ʽ ��Ϊ name �ֶε����������������߸�д��ѯ�߼������� OR ���µ�����ʧЧ��

5. �������� ( != �� <> )

ʹ�ò����ڲ������� != �� <> ��ʱ��MySQL ������Чʹ���������ᵼ��ȫ��ɨ�衣

ʾ����

SELECT * FROM users WHERE age != 30;  -- ����ʧЧ

�����ѯͨ���ᵼ������ʧЧ����Ϊ MySQL �޷�ͨ��������λ�������� != �ļ�¼��

6. ��Χ��ѯ ( > , < , BETWEEN ) �����

�ڸ����������������������У�����һ���ֶ�ʹ���˷�Χ��ѯʱ���������ֶε��������ܻ�ʧЧ��

ʾ����

����������һ���������� (age, name) �����²�ѯ��

SELECT * FROM users WHERE age > 30 AND name = 'Alice';  -- `name` ����ʧЧ

����������£����� age ʹ���˷�Χ��ѯ�� name �е�������ʧЧ��MySQL �޷�ͨ����������ֱ�Ӳ��ҡ�

7. ������ǰ���� IS NULL �� IS NOT NULL

����������ʹ�� IS NULL �� IS NOT NULL ����ʱ MySQL ���ܲ��������������������ڴ������ݴ��� NULL ֵ������£�MySQL ����Ϊ������ʹ�ò����㡣

ʾ����

SELECT * FROM users WHERE name IS NOT NULL;  -- ��������ʧЧ

8. ��ѯ������ʹ�� NOT IN �� NOT EXISTS

ʹ�� NOT IN �� NOT EXISTS Ҳ���ܻᵼ�� MySQL ��ʹ���������Ӷ�����ȫ��ɨ�衣

ʾ����

SELECT * FROM users WHERE id NOT IN (1, 2, 3);  -- ����ʧЧ

9. ���е���������С

�����е���������С��MySQL ������Ϊȫ��ɨ���ʹ����������Ч������������£�MySQL ��ѡ��ֱ��ɨ�������ͨ���������ҡ�

��� �������ֻ�м����ļ���Ҫ���ң���ʱ���ȴ���Ŀ¼�������������㣬ֱ��ɨ��ȫ���ļ����졣

10. MySQL �Ż���ѡ��ʹ������

��ʱ�������������ã�MySQL �IJ�ѯ�Ż������ܻ���ݱ���ͳ����Ϣ�ͳɱ����㣬��Ϊȫ��ɨ���ʹ���������죬�Ӷ�����������

�ܽ᣺

����ʧЧͨ�����ѯ����д�����������͡�����ʹ�á��Լ� MySQL ��ѯ�Ż����ľ����йء�Ϊ�˱�������ʧЧ����Ҫ������������������������磺

  • �� LIKE ��ѯ�б���ͨ��� % ��ͷ
  • ������������һ��
  • ��������������ʹ�ú������������
  • �����滮���������еIJ�ѯ˳��

�ߡ������������MySQL��filesort�ģ�

ͨ�׵����⣬���԰� filesort ����Ϊ���ݿ�ġ���������ʽ��������ѯ�е� ORDER BY ����޷����������е�����˳��ʱ��MySQL �ͻ����� filesort ���ֶ���������

ʲôʱ��ᴥ�� filesort ��

MySQL ����ijЩ�����ʹ�� filesort �����磺

  1. û�к��ʵ����� ��
    ����ѯ�е� ORDER BY �ֶ�û��������MySQL �޷���������˳��ֻ�ܽ��� filesort ����������

    ʾ����

    SELECT * FROM users ORDER BY age;
    

    ���� users ����û�� age �ֶε���������ʱ�� MySQL ����� filesort ��

  2. �������򣬵�������ƥ�� ��
    �����ǶԶ���н������򣬶���Щ��û�б��������ǻ�����˳��������Ҫ�󲻷�ʱ�� filesort Ҳ�ᱻ������

    ʾ����

    SELECT * FROM users ORDER BY age, name;
    

    �������ֻ�� age ����������û�� (age, name) �ĸ�����������ô MySQL ��ʹ�� filesort ��

  3. ��ϲ�ѯ����������������ʧЧ ��
    ����ѯ�ж��ֶν��м����������ʱ��������Щ�ֶ���������Ҳ�޷�ֱ������������������

    ʾ����

    SELECT * FROM users ORDER BY LENGTH(name);
    

    LENGTH(name) ��һ������������MySQL ��Ҫ�ֶ�������˻�ʹ�� filesort ��

filesort �Ĺ�����ʽ��

filesort ʵ����������ʵ�ַ�ʽ��ȡ���� MySQL �İ汾�����ã�

  1. ������������ ��Older Versions����MySQL ��Ѳ�ѯ����������ж�����һ����������Ȼ����� ORDER BY �ֶ����бȽϲ��������ַ�ʽЧ����Խϵͣ���ΪҪ�������������ܴ�

  2. ����ɨ������ ��Optimized Versions�����ڽ��µ� MySQL �汾�У� filesort ������Ż���ֻ���ڵ�һ��ɨ��ʱ�ռ���Ҫ������ֶκ� ROW_ID ��Ȼ��ͨ�������� ROW_ID ��ȥ��ȡ�������ݡ����ַ�ʽ���������������������������ܡ�

filesort ���ܵ�Ӱ�죺

filesort ������˵ÿ�ζ����漰���̲��������п������ڴ�����ɣ������������ϴ�ʱ���ڴ治����������򣬾Ϳ��ܽ�����д����̽�������������Ӱ�����ܡ�

MySQL ��������Ҫ�IJ������� filesort ��Ϊ��

  1. sort_buffer_size ������ MySQL �������ڴ�������Ļ�������С���������������ܷŽ����������������ͻ����ڴ�����ɣ�����MySQL �Ὣ��������д����̣��Ӷ�Ӱ�����ܡ�

  2. max_length_for_sort_data ������ MySQL �������� filesort �������������������ɨ�����򣩡����ڽ϶̵����ݣ�MySQL ������ѡ��Ч�ʽϸߵ�����ɨ������ʽ��

��α�����Ż� filesort ��

  1. ʹ�ú��ʵ����� ��
    ��ֱ�ӵİ취����Ϊ��ѯ�е������ֶδ������������������� ORDER BY �Ӿ�ʱ��ȷ�������˸�������������Ч���� filesort ��

    ʾ����

    CREATE INDEX idx_age_name ON users (age, name);
    
  2. ���� sort_buffer_size ��
    ����޷����� filesort ������ͨ������ sort_buffer_size �Ĵ�С��ȷ���������ݿ������ڴ������򣬼��ٴ��� I/O��

  3. ��������������� ��
    ʹ�� LIMIT �����Ʋ�ѯ������Ĵ�С�����Լ�����Ҫ��������������Ӷ���С filesort �Ŀ�����

    ʾ����

    SELECT * FROM users ORDER BY age LIMIT 100;
    
  4. ��������������ֶ�ʹ�ú��� ��
    �� ORDER BY �У�������Ҫ�������ֶν��к�����������ʽ������������������ MySQL ʹ�������Ŀ����ԡ�

�ܽ᣺

filesort �� MySQL �е�һ��������ƣ�����ѯ����޷�ͨ������˳������ʱ��MySQL �ͻ����� filesort �����ֶ�������Ȼ�������С�file����������δ��һ���漰���̲������ڴ��е�����Ҳ�dz����ġ� filesort �� MySQL �ı�������ʽ��������ʱ���ɱ��⣬�����ǿ���ͨ������������������������С�ȷ�ʽ���Ż��������ܡ�

�ˡ���֪����Щ����»�������

һ���������������

1. DDL ���������ݶ������ԣ�

��ִ��һЩ�ṹ�Ա���IJ��������� ALTER TABLE �� CREATE TABLE �� DROP TABLE ��ʱ��MySQL ����ס����������ֹ�����̶߳Ըñ����в������������� Ԫ������ ��Metadata Lock����������֤���ṹ�ı��������������������������ͻ��

ʾ����

ALTER TABLE users ADD COLUMN age INT;

�˲����������������� users ���IJ����ᱻ������ֱ�������ɡ�

2. ȫ��ɨ��� UPDATE �� DELETE ����

����ִ��һ�� UPDATE �� DELETE ������δʹ������ʱ��MySQL ���ܻ���ס���������и��»�ɾ������Ϊ������ɨ�������С�

ʾ����

UPDATE users SET age = 30 WHERE name LIKE '%John%';  -- ���û����������������

���� LIKE '%John%' �޷�����������MySQL ��Ҫȫ��ɨ�裬����������������

3. �����е�д������ INSERT �� UPDATE �� DELETE ��

�� InnoDB �洢�����У�д������������м��� ���� ��Row Lock����������ijЩ����£���û������������£���MySQL ���ܻ��˻�Ϊ ���� ��Table Lock������ʹ���������ڳ�����δ�ύ��ع�������£�Ҳ���������������񣬴Ӷ�������ӵ���������

ʾ����

BEGIN;
UPDATE orders SET status = 'shipped' WHERE order_id = 1234;  -- ����������������
COMMIT;

��������������˺ܳ�ʱ�䣬������������Ҳ��Ҫ���� orders ���еļ�¼�����ܻᵼ�µȴ���

4. LOCK TABLES ��ʽ����

MySQL ֧��ʹ�� LOCK TABLES ������ʽ�ضԱ���������Ϊ ������READ LOCK�� �� д����WRITE LOCK�� ����д���ڼ䣬�����̲߳��ܶԸñ������κζ���д�������ڶ����ڼ䣬�����߳�ֻ�ܶ�����������д����

ʾ����

LOCK TABLES users WRITE;  -- �� `users` �����

��ʱ�������̶߳� users �����κζ�д�������ᱻ������ֱ�������ͷš�

5. ��������������

����ʹ��ijЩ����������䣨�� INSERT INTO ... SELECT ... �� INSERT IGNORE �������������ʱ�����û��ǡ����������MySQL ���ܻ��������������� MyISAM �洢�����С�

ʾ����

INSERT INTO new_users SELECT * FROM users WHERE created_at > '2023-01-01';  -- ��������

��� created_at û��������MySQL ��Ҫ����������������������

6. ���Լ�����

�� InnoDB �У��������ɾ���漰�����Լ��������ʱ��MySQL ���ܻ���ס�������ӱ���ȷ�����ݵ������ԡ���Ȼ InnoDB �������»�ʹ������������ijЩ���ӵ�����£�����û�к��ʵ����������ܻᵼ�±�����

ʾ����

DELETE FROM orders WHERE order_id = 100;  -- �������Լ����飬������ס `customers` ��

��� orders ������������� customers ������û�к��ʵ����������ܻ���ס customers ����

7. MyISAM �洢����Ķ�д����

�� MyISAM �洢�����У�д��������ס����������ʹֻ�޸���һ�С�������֮�䲻�ụ������������д����֮��ᷢ����������ˣ�MyISAM ���ڴ����߲���д����ʱ���ܻ�Ƶ��������

ʾ����

INSERT INTO myisam_table (name, age) VALUES ('John', 30);  -- д����ס������

����д�����д����������Ƶ������ס��Ӱ�첢�����ܡ�

��������������

������Ӱ�����ݿ�IJ����Ժ����ܣ��������ͨ����Ҫ�������⡣������һЩ�������Լ��������ķ�����

1. ʹ�ú��ʵĴ洢����

����ʹ�� InnoDB �洢���棬��֧�� �м��� �������ھ����������±������������֮�£� MyISAM ʹ�õ��� ������ ���ڲ�����д���������ܽϲ

2. �������ʵ�����

ͨ��Ϊ��ѯ�����е��д����ʵ�������������ȫ��ɨ�衣���磬����㾭������ name �ֶν��в�ѯ�͸��£�Ӧ��Ϊ name �ֶδ���������

CREATE INDEX idx_name ON users (name);

����������Ч���������Ŀ����ԡ�

3. ���ٳ�����

��ʱ��δ�ύ���������������Ӷ�����������ѯ����ˣ��������������ִ��ʱ�䣬ȷ���������о�����ɲ������ύ��

4. ʹ�� OPTIMIZE �� ANALYZE ����

��Щ�������ס����Ԫ���ݣ���ֹ�����Ķ�д������������Щ����ʱӦ����߲���ʱ��Ρ�

5. �������

�����Ҫִ�д����� UPDATE �� DELETE �����Խ���������ִ�У��Լ���ÿ�β����漰�������������ⳤʱ��������

ʾ����

DELETE FROM users WHERE created_at < '2022-01-01' LIMIT 1000;  -- ����ɾ��

6. ������ʽ����

��������ʹ�� LOCK TABLES ������ʽ�����������������ڸ߲��������¡�InnoDB ��������ƺ��м����Ѿ��㹻Ӧ�Դ�����������⡣

�š������������MySQL�е��������Ƶģ�

�� MySQL �У� ���� ��Deadlock����ָ��������������ȴ��Է����е������������Ƕ��޷�����ִ�С�����һ�ֳ����IJ������⣬�������ڸ߲�������£������ڷ�����ͬ��������Դʱ���ײ���������

ͨ�����⣺

���԰��������Ϊ����������һ��խ·�ϣ����Ƕ���Ҫ�Է���·���ܼ���ǰ����A ��ס�� B ��·��B �ֵ�ס�� A ��·��˭Ҳ�������ã���������˶���ס�ˡ��������ݿ��б���Ϊ���� A �ȴ����� B �ͷ���Դ�������� B ͬʱҲ�ڵȴ����� A �ͷ���Դ���������������޷�������

�����IJ������̣�

  1. ���� A ��ȡ��Դ X ���� ��
  2. ���� B ��ȡ��Դ Y ���� ��
  3. ���� A ���Ի�ȡ��Դ Y ����������Դ Y ������ B ��ס���������� A ����ȴ�״̬��
  4. ���� B ���Ի�ȡ��Դ X ����������Դ X �Ѿ������� A ��ס������ B Ҳ����ȴ�״̬��
  5. ����ǣ����� A �ȴ� B������ B �ȴ� A���γ�һ��ѭ���ȴ�������������

MySQL �е��������ƣ�

MySQL ʹ�õĴ洢���� InnoDB �ṩ���м���������Ȼ����������ͻ�ĸ��ʣ���Ҳ�����׵���������InnoDB ��������ʱ����������Ⲣ���������⣬ͨ���ع�����һ�����������ƽ��֡�

�����Ĵ�����ʽ��

�� MySQL �У��� InnoDB ��⵽����ʱ������ѡ��ع� ������С������ ��ͨ���ǻع�����������Դ������Ȼ��������ͻ��˷���һ��������Ϣ�������ڣ�

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

��һ�����񱻻ع�����һ��������Լ���ִ�У�������������⡣

����������

���� MySQL ���Զ���Ⲣ������������Ƶ������������Ӱ��ϵͳ���ܣ���˾������������Ǻ��б�Ҫ�ġ�������һЩ�����ı��������ķ�����

1. �̶�����˳��

ȷ�����������ڷ��ʶ��ű��������¼ʱ����ѭ��ͬ��˳��������Դ���������Ա��ⲻͬ�������ֽ������������������Ŀ����ԡ�

ʾ����
���������ڸ��� users ���� orders ��ʱ��������ס users ��������ס orders ��������������

2. ����������Χ

��������ÿ�����������ķ�Χ��ʱ�䣬���ⳤʱ��ռ���������磬�������������ִ��ʱ�䣬���ٲ���Ҫ�IJ�ѯ��

ʾ����

BEGIN;
UPDATE users SET age = age + 1 WHERE id = 1;
COMMIT;

����������һ�������ڽ��й���IJ�����ȴ��û����롣

3. ʹ�ú��ʵ�����

�ڲ�ѯʱ����ʹ�������������������������ر����� UPDATE �� DELETE ����ʱ�����ʵ��������Լ����������������Ӷ����������ķ��ա�

ʾ����
Ϊ user_id ����������

CREATE INDEX idx_user_id ON orders (user_id);

4. ���ٲ�����

�������ݿ�IJ�����������������ܵĻ��������ڸ߲�������½��д��������ݲ������߲������ʻ����������ĸ��ʡ�

5. ��������������뼶��

ʹ�ú��ʵ�������뼶����Լ���������ͻ��InnoDB ֧�ֶ���������뼶��������� REPEATABLE READ �� READ COMMITTED �����У� READ COMMITTED ���뼶����Լ��������õ�������Ӷ��������������ĸ��ʡ�

ʾ����

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

6. ͨ��������������������ʱ��

�����Ҫ�Դ������ݽ��и��»�ɾ�����������Կ��Ƿ�������������ÿ�������������������Ӷ������������ա�

ʾ����

DELETE FROM orders WHERE order_date < '2023-01-01' LIMIT 1000;

ʹ�� LIMIT ����ɾ�������ݡ�

���������

����������ʱ��InnoDB ���ڴ�����־�м�¼��������Ϣ�������������������Ϣ�Լ���������������Ͳ�ѯ������ͨ������ SQL ����ȡ������Ϣ��

SHOW ENGINE INNODB STATUS;

�����������ʾ InnoDB ��״̬��Ϣ�����а������һ����������ϸ��Ϣ������������������������ĵȴ������

ʮ����������Ż�����ѯ�ģ�

����ѯ���Ż�����ͷ�����

1. ��������ѯ��־

���ȣ�ȷ�� ����ѯ��־ ��Slow Query Log���ѿ��������� MySQL ������¼ִ��ʱ�䳬��ָ����ֵ�IJ�ѯ�������ͨ��������Щ��־���ҳ�ϵͳ�к�ʱ��IJ�ѯ��

��������ѯ��־��

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;  -- ��������ѯ��ֵΪ 1 ��

֮������Բ鿴����ѯ��־���˽���Щ��ѯִ��ʱ�������������Щ��ѯ�����ֽ����Ż���

2. ʹ�� EXPLAIN ������ѯִ�мƻ�

ʹ�� EXPLAIN ������԰������˽� MySQL ���ִ�в�ѯ�������ṩ��Ϣ�磺��ѯ�Ƿ�ʹ����������ɨ���˶����С�����ʽ�ȡ������ͨ���鿴ִ�мƻ������ֲ�ѯ�е�����ƿ����

ʾ����

EXPLAIN SELECT * FROM users WHERE name = 'John';

ִ�н������ʾ��ѯ�����ͣ��� ALL �� INDEX �� RANGE �ȣ������� MySQL �Ƿ�ʹ����ȫ��ɨ�裨 ALL ������������ INDEX ����������� ALL ��ʾȫ��ɨ�裬��ͨ������Ҫ�Ż����źš�

��ν��һЩ�����Ľ����

  • type : ALL ��ʾȫ��ɨ�裬��Ҫ�Ż��� range �� ref �� const ��ʾʹ�������������ܽϺá�
  • rows : ��ʾ MySQL Ԥ��ɨ���������Խ��Խ�á�ɨ�������Խ�࣬��ѯ�Ŀ���Խ��
  • key : ��ʾ MySQL ʹ�����ĸ������������ʾΪ NULL ����ʾû��ʹ��������

3. ������������

������ MySQL �Ż�����ѯ������ֶ�֮һ���ʵ������������������ٲ�ѯ��ɨ��������������ѯ�ٶȡ�

�����������Ż����ԣ�

  • �������� ���Բ�ѯ�г��õĹ��������� WHERE �Ӿ��е��ֶδ���������
  • �������� �����漰��������IJ�ѯ�������������������磬 SELECT * FROM users WHERE age = 30 AND status = 'active'; ������Ϊ (age, status) ����һ������������

ʾ����

CREATE INDEX idx_name ON users (name);
CREATE INDEX idx_age_status ON users (age, status);
  • �������� ���������������ѯ����������ֶΣ�MySQL ����ֱ�Ӵ������ж�ȡ���ݣ���������ʱ������������ܼ��� I/O ���������������ѯЧ�ʡ�

ʾ����

SELECT name FROM users WHERE age = 30;  -- ��� name �� age ���������У�MySQL ����ֻ������
  • ��������ʧЧ ��ȷ����ѯ�����ܹ���ȷ�������������磺
    • ����������ֶ�ʹ�ú��������ʽ���� WHERE UPPER(name) = 'JOHN' �ᵼ������ʧЧ��
    • ʹ�þ�ȷƥ�䣬�������� LIKE '%abc' ����ͨ���ǰ׺�IJ�ѯ��

4. �Ż���ѯ���

�Ľ���ѯ����д�����Դ���������ܡ������Ǽ��ֳ������Ż����飺

  • ѡ����ʵ��������� ������ʹ�ú��ʵ��������ͣ�����ʹ�ù�����ֶγ��ȡ����磬�� INT �洢���䣬�������� VARCHAR ��
  • ���ٲ�ѯ�ķ��ؽ�� ������ SELECT * ��ֻ��ѯ��Ҫ���ֶΡ����ص�����Խ�٣���ѯ�ٶ�Խ�졣

ʾ����

SELECT id, name FROM users WHERE age = 30;  -- ���� SELECT *��ֻȡ������ֶ�
  • �ֽ⸴�Ӳ�ѯ �������ӵIJ�ѯ���Ϊ���С��ѯ����ʱ���������ܣ����������漰���������ʱ�����磬��һ��������� JOIN �ĸ��Ӳ�ѯ����ֳɶ�β�ѯ�����м�����

  • ʹ�� LIMIT �Ż���ҳ ���ڴ���ķ�ҳ��ѯ�У�����ɨ��������ݡ�����ͨ����������������� LIMIT ����

ʾ����

SELECT * FROM users WHERE id > 1000 LIMIT 10;  -- ���������ķ�ҳ

5. �� JOIN ����

JOIN �����ڶ����ѯ�г��������������׵����������⣬�ر��ǵ����ܴ�ʱ���Ż� JOIN ʱ��ע�����

  • ȷ�����������ֶ������� ������ JOIN ��ʹ�õ��ֶΣ�ȷ�������к��ʵ�������

ʾ����

SELECT * FROM orders o JOIN users u ON o.user_id = u.id WHERE u.status = 'active';

����������£� user_id �� id Ӧ�÷ֱ��� orders �� users ������������

  • �������ٹ������������� ��ͨ����ɸѡ����Ҫ�����ݣ��ٽ��� JOIN ���������磬��ɸѡ���������Ӳ�ѯ�У�������Ҫ������������

ʾ����

SELECT * FROM (SELECT id FROM users WHERE status = 'active') u JOIN orders o ON o.user_id = u.id;

6. ���� MySQL ����

MySQL ��һЩ���ò���ֱ��Ӱ���ѯ���ܣ��ر����ڸ߲������������������¡�������һЩ�������Ż�������

  • innodb_buffer_pool_size ������ InnoDB �Ļ���ش�С�������� MySQL �����ö����ڴ�����������ҳ�����ֵͨ������Ϊϵͳ�ڴ�� 70%-80%���Ա㾡���ܼ��ٴ��� I/O��

  • query_cache_size �����ϵͳ�д����IJ�ѯ�������ͬ�ģ��������ò�ѯ���棬�Լ����ظ���ѯ�Ŀ�������Ҫע����ǣ�MySQL 8.0 �в�ѯ���汻���ã���Ϊ���Ը߲����������ܴ�������ƿ����

  • tmp_table_size �� max_heap_table_size ����Щ������������ʱ���������ڴ���ʹ�õ�����С��������Щ������ֵ�����Ա���Ƶ������ʱ��д����̣��Ӷ��������� GROUP BY ��ѯ��Ч�ʡ�

7. ʹ�÷�����

�����ı��dz��󣬿��Կ���ʹ�� ������ ���Ż���ѯ���ܡ������������ݷֳɶ����С�������ӱ���MySQL ���Ը��ݲ�ѯ����ֱ�Ӷ�λ��ij���������Ӷ�����ɨ�����������

ʾ����

CREATE TABLE orders (
    order_id INT,
    order_date DATE,
    user_id INT,
    ...
) PARTITION BY RANGE (YEAR(order_date)) (
    PARTITION p0 VALUES LESS THAN (2010),
    PARTITION p1 VALUES LESS THAN (2015),
    PARTITION p2 VALUES LESS THAN (2020),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

8. ���������ͳ�����

���ij������ѯ�����������ͻ��������ɵģ�Ӧ�þ������ⳤ�����Ƶ��������ͨ����������Χ��ʹ�ú��ʵĸ��뼶�𡢱��������д�����ȷ�ʽ���������ȴ��������ķ������Ӷ��ӿ��ѯ�ٶȡ�

9. ����

����ʹ�� MySQL �����IJ�ѯ���棬�㻹����ʹ��Ӧ�ò�Ļ�����ƣ��� Redis��Memcached������Ƶ�����ʵ����ݻ��浽�ڴ��У��������ݿ�ķ���Ƶ�ʡ�

ʾ����

# ��Ӧ�ò㻺�� MySQL ��ѯ���
cache.set('users:active', active_users, timeout=60*5)  # ���� 5 ����

�ܽ᣺

  • ��������ѯ��־ ��ʹ�� EXPLAIN �˽�ִ�мƻ����Ż�����ѯ�ĵ�һ����
  • �������ʵ����� ����������߲�ѯ�ٶȣ��������ڴ���С�
  • �Ż���ѯ���� JOIN ���� ����������ɨ���������������ʹ���������Dz�ѯ��
  • ͨ������ MySQL ���� ������ϵͳ���ڴ����Դ�������ʡ�
  • �ڴ����ʹ�÷���������ͨ��������ٶ����ݿ��ѹ��

���˵һ��(���ע�����ޣ��������)

����������һ�ݰ������д��ˢ��ʼǣ�һ���Ӵ�ͨ���ҵ��ζ�����������ԭ��û��ô�ѡ�
���Ǵ���д�ģ� 7701ҳ��BAT����д��ˢ��ʼǣ�����offer�õ�����

���ģ�����¼�ڣ��ҵļ�����վ cxykk.com������Ա�������վ ���д������澭�������������ܹ�ʦ�ɳ�֮·���Ⱦ������

��һ�����������ޡ��������ղ�

���޶�����ķdz���Ҫ���������ޣ��Ӹ���ע�һ�dz��м���

С���Ƽ��Ķ�

�������������Ľ�Ϊ������Ϣ����������������ͬ���޹۵��֤ʵ��������

�����Ƶ����

����

ͬ������

����

ɨ��ά�����������ֻ��汾��

ɨ��ά����������΢�Ź��ںţ�

��վ�������������������ϴ��������ַ���İ�Ȩ���뷢�ʼ�[email protected]

��ICP��2022002427��-10 �湫��������43070202000427��© 2013~2025 haote.com ������