MySQL索引
MYSQL 中主键与唯一索引的区别
主键:绝对不能有空值。唯一索引:可以有空值
Mysql常见索引有:
- 主键索引
- 唯一索引
- 普通索引
- 全文索引
- 组合索引
Mysql各种索引区别:
- 普通索引:最基本的索引,没有任何限制
- 唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
- 主键索引:它 是一种特殊的唯一索引,不允许有空值。
- 全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
- 组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。
PRIMARY KEY (主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
UNIQUE (唯一索引) ALTER TABLE `table_name` ADD UNIQUE (`column`)
INDEX (普通索引) ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
FULLTEXT (全文索引) ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
组合索引:ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
优化 MYSQL 的方法
- 第一,数据超过一定数量或者体积,请拆分表,垂直或者水平分(最有效果的优化)
- 第二,务必有自增主键。通过自增主键来查数据是最快的。
- 第三,常用的查询字段建立联合索引,写 SQL 一定要尊从最左原则,用到这个索引。
- 第四,不要把逻辑运算放到 sql 里。言外之意是,不要写太复杂的 SQL,你能写复杂的 SQL 你肯定也能通过 PHP 实现。
SELECT a.*, b.*
FROM `user` as a
LEFT JOIN `user` as b ON a.pid = b.id AND a.salary > b.salary
WHERE b.id > 0;