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);

10\

计算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. 表结构完全一样
  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,索引)