-- EXPLAIN
EXPLAIN SELECT
LEFT(s.created, 7) AS mon,
c.channel,
COUNT(DISTINCT user_id) AS mau
FROM session s
JOIN channel c ON c.id = s.channel_id
GROUP BY 1, 2
ORDER BY 1 DESC, 2;
CREATE TABLE example (
id INT NOT NULL AUTO_INCREMENT,
index_col VARCHAR(20),
PRIMARY KEY (id),
INDEX index_name (index_col)
);
ALTER TABLE testalter_tbl ADD INDEX (column1);
ALTER TABLE testalter_tbl ADD UNIQUE (column1);
ALTER TABLE testalter_tbl ADD FULLTEXT (column1); --> text필드에서 사용(검색에 사용)
ALTER TABLE testalter_tbl DROP INDEX (column1); --> INDEX가 필요없을 때 삭제
CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);
CREATE TABLE prod.session_with_index (
id int NOT NULL auto_increment,
user_id int not NULL,
created timestamp not NULL default CURRENT_TIMESTAMP,
channel_id int not NULL,
PRIMARY KEY(id),
FOREIGN KEY(channel_id) references channel(id),
INDEX user_id(user_id)
);
[예제]
SELECT user_id, COUNT(1)
FROM prod.session
GROUP BY 1;
user_id에 index X
SELECT user_id, COUNT(1)
FROM prod.session_with_index
GROUP BY 1;
user_id에 index O → 이게 더 빠름