Mysql索引的总结

这里仅针对Mysql5.1版本的总结

1、所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。

2、对于MyISAM和InnoDB表,前缀可以达到1000字节长,但是CREATE TABLE语句中的前缀长 度解释为字符数

CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));

3、索引最常用的有两种btree和Hash,其它的还有Rtree,用于 空间列类型的索引。

4、如果表有一个多列索引,优化器可以使用最左面的索引前缀来找出行。

例如有一个3列索引(col1,col2,col3),则在where子句中生效的索引形式为

(col1),(col1,col2),(col1,col2,col3)

5、如果LIKE的参数是一个不以通配符开头的常量字符串,索引也可以用于LIKE比较

SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%';

6、如果col_name被索引,使用col_name IS NULL的搜索将使用索引。

7、任何不跨越WHERE子句中的所有AND级的索引不用于优化查询。( 这一条不是很理解,由字面理解就是所有AND条件中的字段都需要被索引,那么优化查询才会起效,这个也太不方便了吧 )

8、两种常用的创建/修改索引的方式:


create index index1 on table_name (col1,col2(10),col3);


alter table table_name add index index_name (col1,col2,col3);


计算Mysql数据库磁盘大小


use information_schema;


select concat(round(sum(DATA_LENGTH/1024/1024), 2), 'MB')


  as data from TABLES where table_schema='forexpert';


Mysql数据库整理


OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]

11、修改数据库的字符集


//把数据库及其中的字符字段都修改为utf8格式


ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;


//只是修改表的默认字符集


ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

12、添加用户并设置权限和密码

grant replication slave on *.* to'repl'@'218.206.70.146' identified by 'repl';


grant all on *.* to'repl'@'%' identified by 'repl';


#显示用户权限

show grants for root@'localhost'


13、

`role_id` int(11) UNSIGNED NOT NULL DEFAULT '0',


//mysql建立外键的列需要具有非空约束


//mysql5.6.14版本下测得的结果

Mysql把一张表的数据插入另一张表


1

1. 表结构完全一样


 insert into 表1


 select * from 表2


2. 表结构不一样(这种情况下得指定列名)


 insert into 表(列名1,列名2,列名3)


 select  列1,列2,列3 from 表2

Mysql多表级联更新


//方法一

UPDATE product p

INNER JOIN productPrice pp

ON p.productId = pp.productId

SET pp.price = pp.price * 0.8

WHERE p.dateCreated < '2004-01-01'


//方法二

UPDATE product p, productPrice pp

SET pp.price = pp.price * 0.8

WHERE p.productId = pp.productId

AND p.dateCreated < '2004-01-01'


//方法三

UPDATE product p

LEFT JOIN productPrice pp

ON p.productId = pp.productId

SET p.deleted = 1

WHERE pp.productId IS null

当一台机器上安装有多个Mysql时,用mysqldumo可能会报以下错误

mysqldump: unknown option '--no-beep'  


//解决办法如下

mysqldump --no-defaults -u root -p wlan> D:\wlan.sql

去除Mysql权限检查时的DNS前向和逆向查询


#在my.cnf中添加

skip_name_resolve

在查询语句使用/G命令可以使数据垂直显示,但是在Navicat中无法使用,只能在命令行下使用


查看事件

a、查看一个event的详细信息可以用下面的视图:

SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'e_test_insert'   AND EVENT_SCHEMA = 'test'\G;


b、简要列出所有的event:show events

语法:

SHOW EVENTS [FROM schema_name]

   [LIKE 'pattern' | WHERE expr]


格式化显示所有event

SHOW EVENTS\G

格式化显示test用户的event

show events FROM test;


c、查看event的创建信息

SHOW CREATE EVENT event_name

show create event test.e_test\G


添加解压缩版Mysql到win系统服务项

mysqld --install MySQL --defaults-file=C:\my-opts.cnf #开机启动

mysqld --install-manual #手动启动

注意:defaults-file参数中的路径如果用空格,一定要用引号,否则安装服务会失败(win7)


你可能感兴趣的:(mysql,索引)