{"flag":true,"single":true,"pageTitle":"Indexes, Unique, Primary key in Database Mysql","post":{"id":310,"user_id":"1","slug":"indexes-unique-primary-key-in-database-mysql-jvsb","title":"Indexes, Unique, Primary key in Database Mysql","body":"<p>Indexes in MySQL are used to make queries faster. They work like a book&rsquo;s index: instead of reading every page. MySQL must scan the entire table row by row In normal.<\/p>\r\n<p><strong>???? What is an Index?<\/strong><\/p>\r\n<ol>\r\n<li>A data structure (usually a B-Tree) that MySQL maintains for quick lookup. MySQL can jump directly to relevant rows.<\/li>\r\n<\/ol>\r\n<p><strong>???? Types of index?<\/strong><\/p>\r\n<table style=\"border-collapse: collapse; width: 100%; height: 67.1718px;\" border=\"1\"><colgroup><col style=\"width: 49.9676%;\"><col style=\"width: 49.9676%;\"><\/colgroup>\r\n<tbody>\r\n<tr style=\"height: 22.3906px;\">\r\n<td style=\"height: 22.3906px;\"><strong>1.Normal Index<\/strong><\/td>\r\n<td style=\"height: 22.3906px;\"><strong>2. Unique Index<\/strong><\/td>\r\n<\/tr>\r\n<tr style=\"height: 22.3906px;\">\r\n<td style=\"height: 22.3906px;\">Allows duplicate values.<\/td>\r\n<td style=\"height: 22.3906px;\">Ensures that values in the column are unique (like a constraint). ERROR if insert duplicates<\/td>\r\n<\/tr>\r\n<tr style=\"height: 22.3906px;\">\r\n<td style=\"height: 22.3906px;\">Useful for: Best for columns that you frequently use in WHERE, JOIN, or ORDER BY.<\/td>\r\n<td style=\"height: 22.3906px;\">Useful for: emails, usernames, national IDs, etc.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>\r\n<pre class=\"language-markup\"><code>CREATE INDEX idx_name ON users(name);<\/code><\/pre>\r\n<pre class=\"language-markup\"><code>ALTER TABLE users ADD INDEX idx_name (name);<\/code><\/pre>\r\n<\/td>\r\n<td>\r\n<pre class=\"language-markup\"><code>CREATE UNIQUE INDEX uniq_email ON users(email);<\/code><\/pre>\r\n<pre class=\"language-markup\"><code>ALTER TABLE users ADD UNIQUE INDEX uniq_email (email);<\/code><\/pre>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<p>&nbsp;<\/p>\r\n<table style=\"border-collapse: collapse; width: 100%;\" border=\"1\"><colgroup><col style=\"width: 49.9676%;\"><col style=\"width: 49.9676%;\"><\/colgroup>\r\n<tbody>\r\n<tr>\r\n<td><strong>3. Primary Key (special unique index)<\/strong><\/td>\r\n<td><strong>4. Fulltext Index<\/strong><\/td>\r\n<\/tr>\r\n<tr>\r\n<td>\r\n<p>Every table usually has one primary key.<\/p>\r\n<p>It&rsquo;s a unique index that also identifies each row.<\/p>\r\n<\/td>\r\n<td>Special index for searching words inside text. Works with <strong>MATCH() AGAINST().<br><\/strong>Best for articles, reviews, descriptions.<strong><br><\/strong><\/td>\r\n<\/tr>\r\n<tr>\r\n<td>\r\n<pre class=\"language-markup\"><code>ALTER TABLE users ADD PRIMARY KEY (id);<\/code><\/pre>\r\n<\/td>\r\n<td>\r\n<pre class=\"language-markup\"><code>ALTER TABLE reviews ADD FULLTEXT idx_title (title);<\/code><\/pre>\r\n<pre class=\"language-markup\"><code>SELECT * FROM reviews \r\nWHERE MATCH(title) AGAINST('coffee shop' IN NATURAL LANGUAGE MODE);<\/code><\/pre>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<p>&nbsp;<\/p>\r\n<table style=\"border-collapse: collapse; width: 100%;\" border=\"1\"><colgroup><col style=\"width: 99.9353%;\"><\/colgroup>\r\n<tbody>\r\n<tr>\r\n<td><strong>5.Composite Index<\/strong><\/td>\r\n<\/tr>\r\n<tr>\r\n<td>An index on multiple columns.<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>\r\n<pre class=\"language-markup\"><code>CREATE INDEX idx_name_city ON users(name, city);<\/code><\/pre>\r\n<pre class=\"language-markup\"><code>SELECT * FROM users WHERE name='John' AND city='Paris';<\/code><\/pre>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<p data-start=\"2850\" data-end=\"2877\">Example (1 million rows):<\/p>\r\n<table style=\"border-collapse: collapse; width: 100%; height: 111.953px;\" border=\"1\"><colgroup><col style=\"width: 33.3333%;\"><col style=\"width: 33.3333%;\"><col style=\"width: 33.3333%;\"><\/colgroup>\r\n<tbody>\r\n<tr style=\"height: 22.3906px;\">\r\n<td style=\"height: 22.3906px;\"><strong>Query<\/strong><\/td>\r\n<td style=\"height: 22.3906px;\"><strong>Without Index<\/strong><\/td>\r\n<td style=\"height: 22.3906px;\"><strong>With Index<\/strong><\/td>\r\n<\/tr>\r\n<tr style=\"height: 22.3906px;\">\r\n<td style=\"height: 22.3906px;\">WHERE id=123<\/td>\r\n<td style=\"height: 22.3906px;\">1-2 seconds<\/td>\r\n<td style=\"height: 22.3906px;\">1-2 mili seconds<\/td>\r\n<\/tr>\r\n<tr style=\"height: 22.3906px;\">\r\n<td style=\"height: 22.3906px;\">WHERE email='abc@gmail.com'<\/td>\r\n<td style=\"height: 22.3906px;\">1 s<\/td>\r\n<td style=\"height: 22.3906px;\">1-3ms<\/td>\r\n<\/tr>\r\n<tr style=\"height: 22.3906px;\">\r\n<td style=\"height: 22.3906px;\">WHERE name LIKE \"abc%\"<\/td>\r\n<td style=\"height: 22.3906px;\">1 s<\/td>\r\n<td style=\"height: 22.3906px;\">5-10ms<\/td>\r\n<\/tr>\r\n<tr style=\"height: 22.3906px;\">\r\n<td style=\"height: 22.3906px;\">WHERE name LIKE \"%abc%\"<\/td>\r\n<td style=\"height: 22.3906px;\">1s<\/td>\r\n<td style=\"height: 22.3906px;\">1s <span style=\"color: rgb(224, 62, 45);\"><strong>(Index not use if %query%)<\/strong><\/span><\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<div class=\"_tableContainer_1rjym_1\">\r\n<div class=\"_tableWrapper_1rjym_13 group flex w-fit flex-col-reverse\" tabindex=\"-1\">&nbsp;<\/div>\r\n<div class=\"_tableWrapper_1rjym_13 group flex w-fit flex-col-reverse\" tabindex=\"-1\">&nbsp;<\/div>\r\n<div class=\"_tableWrapper_1rjym_13 group flex w-fit flex-col-reverse\" tabindex=\"-1\"><strong>How to Delete Indexes<\/strong><\/div>\r\n<div class=\"_tableWrapper_1rjym_13 group flex w-fit flex-col-reverse\" tabindex=\"-1\">\r\n<pre class=\"language-markup\"><code>-- Drop index created with CREATE INDEX or ALTER TABLE ADD INDEX\r\nDROP INDEX idx_name ON users;\r\n\r\n-- Drop unique index\r\nALTER TABLE users DROP INDEX uniq_email;\r\n\r\n-- Drop primary key\r\nALTER TABLE users DROP PRIMARY KEY;<\/code><\/pre>\r\n<p>&nbsp;<\/p>\r\n<p><strong>How to Check Indexes<\/strong><\/p>\r\n<pre class=\"language-markup\"><code>SHOW INDEXES FROM users;<\/code><\/pre>\r\n<p><strong>Key_name <\/strong>&rarr; index name<br><strong>Non_unique <\/strong>&rarr; 0 = unique, 1 = not unique<br><strong>Seq_in_index <\/strong>&rarr; column order in composite index<\/p>\r\n<p><strong>Use EXPLAIN to check if MySQL is actually using your index:<\/strong><\/p>\r\n<pre class=\"language-markup\"><code>EXPLAIN SELECT * FROM users WHERE email = 'abc@test.com';<\/code><\/pre>\r\n<p>&nbsp;<strong>Summary:<\/strong><\/p>\r\n<p><strong>INDEX <\/strong>= speed booster.<\/p>\r\n<p><strong>UNIQUE INDEX <\/strong>= speed booster + ensures no duplicates.<\/p>\r\n<p><strong>FULLTEXT <\/strong>= for searching words.<\/p>\r\n<p>Indexes can make queries run in milliseconds instead of seconds, especially on large tables.<\/p>\r\n<p><strong>Export Database:<\/strong><\/p>\r\n<pre class=\"language-markup\"><code>\/\/ Generate Schema-Only Dump (including Primary &amp; Unique Keys)\r\nmysqldump -u rizi -p --no-data reviewsfunda &gt; schema_only.sql \r\n\r\n\/\/ export only data insert commands\r\nmysqldump -u rizi -p --no-create-info reviewsfunda &gt; data_only.sql \r\n\r\n# Get a full schema dump including all index definitions\r\nmysqldump -u rizi -p --no-data --skip-add-drop-table reviewsfunda &gt; full_schema_with_indexes.sql \r\n<\/code><\/pre>\r\n<p><strong>Import Database:<\/strong><\/p>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n<\/div>","category_id":"23","is_private":"0","created_at":"2025-09-08T06:30:27.000000Z","updated_at":"2025-09-11T20:45:24.000000Z","category":{"id":23,"user_id":"1","name":"DATABASE","slug":"database-j4ss","parent_id":null,"created_at":"2023-05-26T03:25:05.000000Z","updated_at":"2023-05-26T03:25:05.000000Z"},"user":{"id":1,"name":"R GONDAL","email":"rizikmw@gmail.com","email_verified_at":null,"two_factor_confirmed_at":null,"current_team_id":"1","profile_photo_path":null,"created_at":"2023-03-12T10:49:33.000000Z","updated_at":"2025-01-10T12:59:00.000000Z","profile_photo_url":"https:\/\/ui-avatars.com\/api\/?name=R+G&color=7F9CF5&background=EBF4FF"}},"pageDesc":"Indexes in MySQL are used to make queries faster. They work like a book&rsquo;s index: instead of reading every page. MySQL must scan the en - Indexes, Unique, Primary key in Database Mysql (Updated: September 11, 2025) - Read more about Indexes, Unique, Primary key in Database Mysql at my programming site [SITE]","categories":[]}