Tags: mysql, sql, joins, indexing, stored-procedures, triggers, replication, explain, database Last updated: 2026-06-26

MySQL Cheatsheet

Quick Reference

ConceptExample
JOINFROM a JOIN b ON a.id = b.a_id
CREATE INDEXCREATE INDEX idx ON t (col)
Stored procedureCREATE PROCEDURE n() BEGIN ... END
TriggerCREATE TRIGGER n BEFORE INSERT ...
EXPLAINEXPLAIN SELECT ...
EXPLAIN ANALYZEEXPLAIN ANALYZE SELECT ... (8.0.18+)
ReplicationSHOW REPLICA STATUS\G
Full-textMATCH(col) AGAINST('term')

Joins

SELECT u.name, o.total FROM users u
JOIN orders o ON u.id = o.user_id;

SELECT u.name, o.total FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

Indexing

CREATE INDEX idx_email ON users (email);
CREATE UNIQUE INDEX idx_uq ON users (email);
CREATE INDEX idx_user_date ON orders (user_id, created_at DESC);
CREATE FULLTEXT INDEX idx_body ON posts (title, body);

EXPLAIN SELECT * FROM users WHERE email = '[email protected]';
EXPLAIN FORMAT=JSON SELECT ...;
EXPLAIN ANALYZE SELECT ...;    -- 8.0.18+

Stored Procedures

DELIMITER //
CREATE PROCEDURE GetOrders(IN uid INT)
BEGIN
  SELECT * FROM orders WHERE user_id = uid;
END //
DELIMITER ;
CALL GetOrders(1);

Triggers

DELIMITER //
CREATE TRIGGER before_user_update
BEFORE UPDATE ON users FOR EACH ROW
BEGIN
  SET NEW.updated_at = NOW();
END //
DELIMITER ;

Replication Basics

-- my.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log

CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='master', SOURCE_USER='r',
  SOURCE_PASSWORD='p', SOURCE_LOG_FILE='...',
  SOURCE_LOG_POS=157;
START REPLICA;
SHOW REPLICA STATUS\G

EXPLAIN Analysis

ColumnMeaning
typeALL=bad, ref=good, const=best
keyIndex used
rowsEstimated rows scanned
ExtraUsing index=good, filesort/temporary=bad

Tips